Android.mk文件学习

本文深入解析Android.mk文件的关键配置,如LOCAL_PATH定义、CLEAR_VARS使用、LOCAL_MODULE标识、编译模式控制、模块依赖设置等,帮助开发者理解Android项目构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、LOCAL_PATH:= $(callmy-dir)

‘:=’是赋值的意思,LOCAL_PATH 定义了当前模块的相对路径,必须出现在所有的编译模块之前。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

2、include $( CLEAR_VARS)

CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),

除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

每个编译模块由include $(CLEAR_VARS) 开始,由include $(BUILD_XXX) 结束

3、LOCAL_JACK_ENABLED:=disabled

LOCAL_JACK_ENABLED有三种模式,即分别是disabled,full和incremental。disabled是指关闭JACK编译,使用android old toolchain。full是指全部编译,即每次编译,都会将所有的code全部编译。incremental是指增量编译,即只会编译修改的代码。incremental模式默认是关闭的,需要设置。

不加本行会生成clasess.jack而非clasess.jar。

4、LOCAL_MODULE := helloworld

LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。

5、LOCAL_SRC_FILES := $(call all-subdir-java-files)

定义了本模块编译使用的源文件,采用的是基于LOCAL_PATH的相对路径

6、LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_TAGS :=user eng tests optional 

- user: 指该模块只在user版本下才编译 

- eng: 指该模块只在eng版本下才编译 

- tests: 指该模块只在tests版本下才编译 

- optional:指该模块在所有版本下都编译 

7、LOCAL_PRIVILEGED_MODULE :=true

LOCAL_PRIVILEGED_MODULE := true 表示app应用在目录/system/priv-app/下

LOCAL_PRIVILEGED_MODULE := false 表示app应用在目录/system/app/下

8、DEVICE_PACKAGE_OVERLAYS := \

         device/samsung/avl7580/overlay

‘\’表示连接符,DEVICE_PACKAGE_OVERLAYS可以设定路径,起到的作用就是替换掉原来的目录中的资源,比如图片等等,惟一的要求就是必须建立和原来图片位置相同的路径

有两种不同的overaly目录定义,来影响最终的效果:

PRODUCT_PACKAGE_OVERLAYS: used by a particular product 

DEVICE_PACKAGE_OVERLAYS: used several products that share a common device model 

如果包含同一资源,那么 PRODUCT_PACKAGE_OVERLAYS 将覆盖 DEVICE_PACKAGE_OVERLAYS 

9、LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v13

当前模块依赖的java静态库,这项不是必须的。

include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := aa
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := aa:libs/aa.jar
include $(BUILD_MULTI_PREBUILT)

10、LOCAL_CERTIFICATE := platform 

(1)AndroidManifest.xml的manifest节点中添加 android:sharedUserId=”android.uid.system”, 

Android.mk中增加  LOCAL_CERTIFICATE := platform 

(2)shared签名: 

AndroidManifest.xml的manifest节点中增加android:sharedUserId=”android.uid.shared”, 

Android.mk中增加LOCAL_CERTIFICATE := shared 

(3)media签名: 

AndroidManifest.xml的manifest节点中增加 android:sharedUserId=”android.media”, 

Android.mk中增加 LOCAL_CERTIFICATE := media 

11、LOCAL_RESOURCE_DIR += \

$(LOCAL_PATH)/res \

$(LOCAL_PATH)/res_p

资源目录

12、include $(BUILD_STATIC_JAVA_LIBRARY)

编译目标说明
BUILD_HOST_STATIC_LIBRARY主机上的静态库
BUILD_HOST_SHARED_LIBRARY主机上的动态库
BUILD_HOST_EXECUTABLE主机上的可执行文件
BUILD_STATIC_LIBRARY目标设备上的静态库
BUILD_SHARED_LIBRARY目标设备上的动态库
BUILD_EXECUTABLE目标设备上的可执行文件
BUILD_JAVA_LIBRARYJAVA库
BUILD_STATIC_JAVA_LIBRARY静态JAVA库
BUILD_HOST_JAVA_LIBRARY主机上的JAVA库
BUILD_PACKAGEAPK程序

参考:

Android.mk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值