05/17
2017

直接添加 Android Studio 工程到 Framework 下之 Makefile 指定 Manifest 目录及资源目录

Android 系统源码下的 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: *** 没有规则可以创建“.../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 到系统 so 目录下。

更多可见 https://developer.android.com/ndk/guides/android_mk.html

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

One thought on “直接添加 Android Studio 工程到 Framework 下之 Makefile 指定 Manifest 目录及资源目录