编写模块的编译文件,实际就是定义一系列以“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. JZOJ 4895【NOIP2016提高A组集训第16场11.15】三部曲

    题目 对于 \(50%\) 的数据,\(1<=n<=1000,1<=p<=300\) 对于 \(100%\) 的数据,\(1<=n<=50000,1<=p&l ...

  2. vue2 使用x2js json转换成xml

    安装: 在项目终端运行以下命令 cnpm install x2js --save 引用: // 引入模块 import x2js from 'x2js' 全部代码: <template> ...

  3. mac系统上hdfs java api的简单使用

    目录 1.背景 2.环境准备 3.环境搭建 3.1 引入jar包 3.2 引入log4j.properties配置文件 3.3 初始化Hadoop Api 4.java api操作 4.1 创建目录 ...

  4. Solon v2.2.1 发布。向 Graalvm Native 友好靠近

    本次更新最重要的是增加了 Solon APT 项目,为更简单的完成 Graalvm Native 打包提供了帮助:其次是增加了 @ProxyComponent 和 @SolonMain 注解:以及优化 ...

  5. [引擎开发] 深入GPU和渲染优化(基础篇)

    https://blog.csdn.net/ZJU_fish1996/article/details/109269448

  6. android 上传文件到服务器,FTP方式

    public class UploadFileUtils { private static boolean flag; /** * 需在在子线程下执行 * pathname 为:服务器存储地址 ,re ...

  7. 问题集锦 ~ MySQL

    # 在存储过程中,变量赋值失败 declare parent text; select parent into Parent where id = 1; select Parent; 查询的字段不能和 ...

  8. uniapp中关于navigateBack返回刷新,h5和小程序端

    注意: 小程序中,如果路径中有参数,在生命周期onLoad()中需要获取,可以用beforePage.options 就能获取到url中的参数

  9. 03-python基本数据类型详解

    python基本数据类型详解 一.整型int 存储年龄,身份证号等 age = 18 id = 0000001 # 注:可以使用type关键字查看变量的数据类型 print(type(age)) # ...

  10. LP1-5:接口测试方法