Android.mk 用法解析2



package/app/Settings/Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Settings
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

            PS:GNU Make‘功能’宏,必须通过使用'$(call  )'来调用,调用他们将返回文本化的信息。

(1) LOCAL_PATH:= $(call my-dir)

           一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。宏函数’my-dir’,由编译系统提供,用于返回当前路径(即包含Android.mk file文件

          的目录)。

           (2) Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始,以include $(BUILD_XXX)结束。

(2.1) include $(CLEAR_VARS)

           CLEAR_VARS指的是clear_vars.mk,由编译系统提供,它会让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,如LOCAL_MODULE,

            LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,

            所有的变量都是全局的。

(2.2) include $(BUILD_PACKAGE)      # Tell it to build an APK

            $(BUILD_PACKAGE)是用来编译生成package/app/下的apk。还有其他几种编译情况:
            include $(BUILD_STATIC_LIBRARY)    表示编译成静态库;
            include $(BUILD_SHARED_LIBRARY)    表示编译成动态库;
            include $(BUILD_EXECUTABLE)        表示编译成可执行程序;

(3) LOCAL_MODULE_TAGS := optional

            解析:LOCAL_MODULE_TAGS :=user eng tests optional;
            user:  指该模块只在user版本下才编译;
            eng:  指该模块只在eng版本下才编译;
            tests: 指该模块只在tests版本下才编译;
            optional:指该模块在所有版本下都编译;
            取值范围debug eng tests optional samples shell_ash shell_mksh。注意不能取值user,如果要预装,则应定义core.mk。

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

            (4.1) 如果要包含的是java源码的话,可以调用all-java-files-under得到。(这种形式来包含local_path目录下的所有java文件);
            (4.2) 当涉及到C/C++时,LOCAL_SRC_FILES变量就必须包含将要编译打包进模块中的C或C++源代码文件。注意,在这里你可以不用列出头文

            件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。all-java-files-under宏的定义是在

            build/core/definitions.mk中。

(5) LOCAL_PACKAGE_NAME := Settings

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

(6) LOCAL_CERTIFICATE := platform

              LOCAL_CERTIFICATE 后面是签名文件的文件名,说明Settings.apk是一个需要platform

              key签名的APK

(7) include $(BUILD_PACKAGE)

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

            加载当前目录下的所有makefile文件,all-makefiles-under会返回一个位于当前'my-dir'路径的子目录中的所有Android.mk的列表。all-makefiles-under宏的定义是在

          build/core/definitions.mk中。

          编译此Android.mk文件最后就生成了Settings.apk。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android.mkAndroid提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。它的作用是帮助开发者在Android项目中管理和编译NDK代码。在一个Android子项目中,可以存在一个或多个Android.mk文件。如果只有一个Android.mk文件,可以直接参考NDK的sample目录下的hello-jni项目。如果需要编译的模块比较多,可以将对应的模块放置在相应的目录中,并在每个目录中定义对应的Android.mk文件。最后,在根目录放置一个Android.mk文件,通过include $(call all-subdir-makefiles)来包含所有子目录中的Android.mk文件。Android.mk文件可以用来组织源文件成模块,包括静态库和动态库。静态库可以通过include $(BUILD_STATIC_LIBRARY)来编译生成,动态库可以通过include $(BUILD_SHARED_LIBRARY)来编译生成。掌握Android.mk的语法规范对于熟练掌握JNI开发是必要的。\[2\]\[3\] #### 引用[.reference_title] - *1* [Android.mk解析与使用](https://blog.csdn.net/hejnhong/article/details/120585740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android.mk语法规范](https://blog.csdn.net/liukun321/article/details/8848417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android.mk用法详解](https://blog.csdn.net/fengruoying93/article/details/111241803)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值