java_resource_dirs_Android make脚本简记

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:43   109   0

Android Make脚本的简记(1)

1. Build Layers

Build Layers描述的是产品的硬件配置情况,据此make时选择不同的配置和模块。按照从上到下的顺序,Build Layer分成4层。

Layer sample Note

Arch arm, x86 处理器的种类

Board - 板子类型的代号

Device - device配置的类型代号

Product - 具体产品的代号

2. 添加应用

2.1 一个例子

以calculator为例,app代码可以放到packages/apps/目录下边,一个app对应一个目录,此例,pakcages/apps/Calculator/。创建Android.mk,已去除多余的注释行。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := libarity

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_SDK_VERSION := current

LOCAL_PACKAGE_NAME := Calculator

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:arity-2.1.2.jar

include $(BUILD_MULTI_PREBUILT)

# Use the folloing include to make our test apk.

include $(call all-makefiles-under,$(LOCAL_PATH))

至少有一个子目录,src下放源码。

Android.mk中需要赋值的几个LOCAL_XXX变量,

LOCAL_PATH,调用my-dir(在defination.mk中定义),得到当前路径,即,/ pakcages/apps/Calculator/。

LOCAL_MODULE_TAGS,,取值范围debug eng tests optional samples shell_ash shell_mksh。注意不能取值user,如果要预装,则应定义core.mk。

LOCAL_SRC_FILES,app的所有源码,可以调用all-java-files-under得到,如果是java源码的话。

LOCAL_PACKAGE_NAME,package的名字,这个名字在脚本中将标识这个app或package。

$(CLEAR_VARS)指的是clear_vars.mk,脚本会清空所有LOCAL_xxx的变量,不影响后面这些变量的使用。

$(BUILD_PACKAGE)指的是package.mk

最后一句all-makefiles-under将会包含当前目录下所有的mk脚本文件。

2.2 LOCAL_XXX的列表

说明:

必须定义, 在app或package的Android.mk中必须给定值。

可选定义,在app或package的Android.mk中可以也可以不给定值。

不用定义,在app或package的Android.mk中不要给定值,脚本自动指定值。

LOCAL_PATH, 当前路径,必须定义。

LOCAL_PACKAGE_NAME, 必须定义,package的名字,这个名字在脚本中将标识app或package。

LOCAL_MODULE_SUFFIX, 不用定义,module的后缀,=.apk。

LOCAL_MODULE, 不用定义,=$(LOCAL_PACKAGE_NAME)。

LOCAL_JAVA_RESOURCE_DIRS, 不用定义。

LOCAL_JAVA_RESOURCE_FILES, 不用定义。

LOCAL_MODULE_CLASS, 不用定义。

LOCAL_MODULE_TAGS, 可选定义。默认optional。取值范围user debug eng tests optional samples shell_ash shell_mksh。

LOCAL_ASSET_DIR, 可选定义,推荐不定义。默认$(LOCAL_PATH)/assets

LOCAL_RESOURCE_DIR, 可选定义,推荐不定义。默认product package和device package相应的res路径和$(LOCAL_PATH)/res。

LOCAL_PROGUARD_ENABLED, 可选定义,默认为full,如果是user或userdebug。取值full, disabled, custom。

full_android_manifest, 不用定义,=$(LOCAL_PATH)/AndroidManifest.xml。

LOCAL_EXPORT_PACKAGE_RESOURCES, 可选定义,默认null。如果允许app的资源被其它模块使用,则设置true。

LOCAL_CERTIFICATE, 可选定义,默认为testkey。最终

private_key := $(LOCAL_CERTIFICATE).pk8

certificate := $(LOCAL_CERTIFICATE).x509.pem

2.3 mm创建apk时的package.mk中变量分析

以Calculator为例,

由LOCAL_PATH,LOCAL_PACKAGE_NAME导出变量LOCAL_MODULE,all_assets,all_assets,all_resources。

设置LOCAL_MODULE_CLASS=APPS,此值local-intermediates-dir会用到。

设置中间生成目录路径,中间路径将放置R.stamp文件。

package_expected_intermediates_COMMON := $(call local-intermediates-dir,COMMON)

这里COMMON是null,而LOCAL_MODULE_CLASS=APPS,所以

package_expected_intermediates_COMMON=out/target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates

package_expected_intermediates_COMMON=out/target/common/obj/APPS/Calculator_intermediates

设置

LOCAL_BUILT_MODULE_STEM := package.apk

LOCAL_BUILT_MODULE := $(built_module_path)/$(LOCAL_BUILT_MODULE_STEM) @base_rules.mk

built_module_path := $(intermediates) @base_rules.mk

intermediates := $(call local-intermediates-dir) @java.mk

最终

LOCAL_BUILT_MODUwF&vWBb7fc3

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP