直接添加 Android Studio 工程到 Framework 下之 Makefile 指定 Manifest 目錄及資源目錄
Android 系統(tǒng)源碼下的 App 工程目錄結構還是跟 Eclipse 時代一樣,項目根目錄下直接包含 src、res、AndroidManifest.xml 等。
1. 直接添加 Eclipse 工程
添加一個 Eclipse 工程只需新建 Android.mk,內容為:
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(call all-subdir-java-files)
- LOCAL_PACKAGE_NAME := DeveloperTools
- LOCAL_CERTIFICATE := platform
- LOCAL_PROGUARD_FLAG_FILES := proguard.cfg
- LOCAL_PROGUARD_ENABLED := full
- include $(BUILD_PACKAGE)
即可,而對于 Android Studio 工程如若也是如此,便會報:
(1) AndroidManifest 文件找不到
- make:進入目錄'...'
- make: *** 沒有規(guī)則可以創(chuàng)建“.../target/product/generic/obj/APPS/DeveloperTools_intermediates/package.apk”需要的目標“packages/apps/DeveloperTools/AndroidManifest.xml”。 停止。
- make:離開目錄“...”
- #### make failed to build some targets (1 seconds) ####
(2) 資源 R 文件錯誤
- make:進入目錄'...'
- target Java: DeveloperTools (.../target/common/obj/APPS/DeveloperTools_intermediates/classes)
- packages/apps/DeveloperTools/app/build/generated/source/r/debug/.../systemservice/R.java:10: 錯誤: 類重復: ....R
- public final class R {
- ^
- 注: packages/apps/DeveloperTools/app/src/main/java/... 使用或覆蓋了已過時的 API。
- 注: 有關詳細信息, 請使用 -Xlint:deprecation 重新編譯。
- 1 個錯誤
- make: *** [.../target/common/obj/APPS/DeveloperTools_intermediates/classes-full-debug.jar] 錯誤 41
- make:離開目錄“...”
- #### make failed to build some targets (1 seconds) ####
2. 直接添加 Android Studio 工程
在項目根目錄下新建 Android.mk 文件,對于一般 Android Studio 工程內容如下:
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(call all-subdir-java-files)
- LOCAL_PACKAGE_NAME := DeveloperTools
- LOCAL_CERTIFICATE := platform
- LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml
- LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res
- LOCAL_PROGUARD_FLAG_FILES := proguard.cfg
- LOCAL_PROGUARD_ENABLED := full
- include $(BUILD_PACKAGE)
與 Framework 中 packages/apps 下其他 app Makefile 文件不同點主要在于
(1) 指定了LOCAL_MANIFEST_FILE屬性,表示 Manifest 的路徑
(2) 指定了LOCAL_RESOURCE_DIR屬性,表示 Res 的路徑
如此即可將一個 Android Studio 工程代碼完整放入到 packages/apps 進行編譯。
注意上面 Manifest 路徑可以用項目路徑相對地址,而 Res 路徑 LOCAL_RESOURCE_DIR 需要加上基地址 $(LOCAL_PATH)。
3. Android.mk 其他屬性
LOCAL_STATIC_JAVA_LIBRARIES 表示依賴的庫別名
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES 表示依賴的庫具體路徑
PRODUCT_COPY_FILES 表示復制某個文件到目的地,如:
PRODUCT_COPY_FILES += $(LOCAL_PATH)/libs/armeabi/libapkpatch.so:system/lib/libapkpatch.so
表示復制應用內 so 到系統(tǒng) so 目錄下。