编写模块的编译文件,实际就是定义一系列以“LOCAL_”开头的编译变量,因此我们有必要弄明白这些变量的具体含义。下面是一些经常使用的LOCAL_编译变量的说明:

变量名

说明

LOCAL_ASSET_FILES

编译APK文件时用于指定资源列表,通常写成

LOCAL_ASSET_FILES += $(call find-subdir-assets)。

LOCAL_CC

自定义C编译器来代替缺省的编译器。

LOCAL_CXX

自定义C++编译器来代替缺省的编译器。

LOCAL_CFLAGS

定义额外的C/C++编译器的参数。

LOCAL_CPPFLAGS

仅定义额外的C++编译器的参数,不用在C编译器中。

LOCAL_CPP_EXTENSION

自定义C++源文件的后缀。例如:LOCAL_CPP_EXTENSION := .cc

注意:一旦定义,模块中所有的源文件都必须使用该后缀,目前不支持混合后缀。

LOCAL_C_INCLUDES

指定头文件的搜索路径。

LOCAL_FORCE_STATIC_EXECUTABLE

如果编译时候需要链接的库有共享和静态两者共存的情况。设定此变量值为true将会优先链接静态库。通常这种情况只会在编译root/sbin目录下的应用才会用到,因为他们执行的时间比较早,文件系统的其他部分还没有加载。

LOCAL_GENERATED_SOURCES

指定由系统自动生成的文件列表。

LOCAL_MODULE_TAGS

定义模块标签,Build系统根据标签决定哪些模块被安装。

LOCAL_REQUIRED_MODULES

指定依赖的模块。一旦本模块被安装,通过此变量指定的模块也将被安装

LOCAL_JAVACFLAGS

定义额外的javac编译器的参数

LOCAL_JAVA_LIBRARIES

指定模块依赖的java共享库

LOCAL_LDFLAGS

定义链接器ld的参数

LOCAL_LDLIBS

指定模块链接时依赖的库。如果这些库文件不存在,并不会引发对它们的编译。这是此变量和LOCAL_SHARED_LIBRARIES的主要区别。

LOCAL_NO_MANIFEST

在一个资源apk中可以指定此变量为true,表示此apk文件没有AndroidManifest.xml文件。

LOCAL_PACKAGE_NAME

指定APP应用名称。

LOCAL_PATH

指定Android.mk文件所在的目录。

LOCAL_POST_PROCESS_COMMAND

在编译host相关的模块时,可以用此变量定义一条命令在link完成后执行。

LOCAL_PREBUILT_LIBS

指定预编译c/c++动态和静态库列表。用于预编译模块定义中。

LOCAL_PREBUILT_JAVA_LIBRARIES

指定预编译java库列表。用于预编译模块定义中。

LOCAL_SHARED_LIBRARIES

指定模块依赖的c/c++共享库列表。

LOCAL_SRC_FILES

指定源文件列表。

LOCAL_STATIC_LIBRARIES

指定依赖的c/c++静态库列表。

LOCAL_MODULE

除应用(apk)以LOCAL_PACKAGE_NAME指定模块名以外,其余的模块都以LOCAL_MODULE指定模块名。

LOCAL_MODULE_PATH

指定模块在目标系统的安装路径。

LOCAL_UNSTRIPPED_PATH

指定模块的unstripped 版本在out目录下的保存路径。

LOCAL_WHOLE_STATIC_LIBRARIES

这个变量也是定义了模块依赖的静态库列表,和LOCAL_STATIC_LIBRARIES类似。但是通过这个变量定义,链接时链接器不会将静态库中无人调用的代码去掉。

LOCAL_YACCFLAGS

指定yacc的参数。

LOCAL_ADDITIONAL_DEPENDENCIES

指定本模块的依赖。用在不方便使用别的方法来指定依赖关系时。

LOCAL_BUILT_MODULE

指定编译时存放中间文件的目录。

LOCAL_INSTALLED_MODULE

指定模块的安装路径。

LOCAL_MODULE_CLASS

定义模块的分类。根据分类,生成的模块文件会安装到目标系统相应的目录下。例如:APPS:安装到/system/app下;SHARED_LIBRARIES:安装到/system/lib下;EXECUTABLES:安装到/system/bin下;ETC:安装到/system/etc下;但是如果同时用LOCAL_MOULE_PATH定义了路径,则安装到该路径。

LOCAL_MODULE_NAME

指定模块的名称。但是目前系统中用到它的实例。

LOCAL_MODULE_SUFFIX

指定当前模块的后缀。一旦指定,系统在产生目标文件时,会以模块名加后缀来创建目标文件

LOCAL_STRIP_MODULE

指定模块是否需要被strip,该模块是可执行文件或动态库才能使用该变量。

LOCAL_STRIPPABLE_MODULE

此变量的值通常由Build系统设置,一般可执行文件和动态库被设为true。

LOCAL_SYSTEM_SHARED_LIBRARIES

此变量在编译系统的基本库,如:libc,libm,libdl时,用来定义这些库的依赖库。通常在应用模块定义中不应使用该变量。

LOCAL_PRELINK_MODULE

编译.so模块时,定义是否需要prelink。prelink是通过预链接的方式来加快程序启动速度。如果要设置此值为true,要先在build/core/prelink-linux-arm.map文件中定义该库的地址和大小,否则报错。但是在Android4.2以后的代码中找不到文件prelink-linux-arm.map了,在build目录下也搜寻不到这个变量。可能Android已经取消了prelink的功能。

Android build系统中常用“LOCAL_” 变量的更多相关文章

  1. Android.mk 中常用“LOCAL_” 变量

    编写模块的编译文件,实际就是定义一系列以“LOCAL_”开头的编译变量,因此我们有必要弄明白这些变量的具体含义.下面是一些经常使用的LOCAL_编译变量的说明: 变量名 说明 LOCAL_ASSET_ ...

  2. repo: 创建local manifest以及如何添加app到CM/Android build系统中

    The local manifest Creating a local manifest allows you to customize the list of repositories on you ...

  3. 【转】理解 Android Build 系统----不错

    $ mmm -help用法:make [选项] [目标] ...选项: -b, -m 忽略兼容性. -B, --always-make Unconditionally make all targets ...

  4. 理解Android Build系统【转】

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ Android Build 系统是用来编译 And ...

  5. 理解 Android Build 系统

    在配置了以上的文件之后,便可以编译出我们新添加的设备的系统镜像了. 首先,调用“source build/envsetup.sh”该命令的输出中会看到 Build 系统已经引入了刚刚添加的 vendo ...

  6. Ant build xml中的各种变量解释

    Ant build.xml中的各种变量 Ant环境变量分为四种: 1.      build.properties文件中定义的变量 2.      build.xml文件中定义的变量, 3.      ...

  7. selenium.webdriver.common.keys 模块中常用的变量

    表11-5 selenium.webdriver.common.keys 模块中常用的变量属性 含义Keys.DOWN, Keys.UP, Keys.LEFT,Keys.RIGHT 键盘箭头键Keys ...

  8. android Build系统

    http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ android Build系统 超链接

  9. [原创]Android系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

  10. Windows系统中path环境变量详解

    在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

随机推荐

  1. libco 源码剖析(1): 协程上下文切换之 32 位

    libco 源码剖析(1): 协程上下文切换之 32 位 相关背景资料 关于汇编语言及内存布局相关基础,参看 参考文献[0], 参考文献[1] 32 位协程上下文结构如下: // coctx.h st ...

  2. CSP2022 S游记

    9.26:开坑. 没报 J 组主要是因为 J 比较垃圾,去抢小朋友的一等没什么意思. 初赛 刚拿到试卷就直接懵了,这 tm 是给人做的题?宇宙射线是什么奇妙东西,还有基数排序我根本不会啊,这个阅读程序 ...

  3. RocketMQ 5.0 vs 4.9.X 图解架构对比

    本文作者:李伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云数据库开发工程师. 0 ...

  4. idea导入tomcat8源码搭建源码调试环境

    从apache tomcat下载tomcat8源码 1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml, 手动创建一个pom.xml放入源码根目录 <?xm ...

  5. LeetCode-2049 统计最高分的结点数

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/count-nodes-with-the-highest-score 题目描述 给你一棵根节点为 ...

  6. ChatGpt聊天API使用

    昨天ChatGpt发布了聊天API,新增了两个模型,目前还是测试阶段 gpt-3.5-turbo 功能强大的GPT-3.5模型,专门针对聊天做了优化 gpt-3.5-turbo-0301 此模型只支持 ...

  7. 【C学习笔记】day3-3 编写程序数一下 1到 100 的所有整数中出现多少个数字9

    #include <stdio.h> int main() { int cou=0; for (int i = 1; i <= 100; i++) { if (i % 10 == 9 ...

  8. JS:获取元素属性

    元素上属性字段 const el = document.getElementById('documentLabel') console.log(el.clientWidth) // 可见区域宽 con ...

  9. having对聚合函数的结果集进行过滤

    SELECT rl.road_code,string_agg(distinct rs.tech_level_label, ',') from road_lst rlleft join road_sec ...

  10. phpstudy 配置域名解决index.php 过多重定向

    server { listen 80; server_name www.cqtldd.com cqtldd.com; root "D:/phpstudy_pro/WWW/tongliangd ...