编写模块的编译文件,实际就是定义一系列以“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的功能。

参考:http://blog.sina.com.cn/s/blog_dae890d10101f01f.html

Android.mk 中常用“LOCAL_” 变量的更多相关文章

  1. Android.mk中的经常使用语法

    Android.mk编译文件是用来向Android NDK描写叙述你的C,C++源码文件的, 今天查了一些经常使用的的语法. 一 概述: 一个Android.mk文件用来向编译系统描写叙述你的源码. ...

  2. [转]编写Android.mk中的LOCAL_SRC_FILES的终极技巧

    希望看原文的请移步:[原创]编写Android.mk中的LOCAL_SRC_FILES的终极技巧 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的 ...

  3. 编写Android.mk中的LOCAL_SRC_FILES的终极技巧(转)

    转自:http://blog.csdn.net/fu_zk/article/details/12836431 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件, ...

  4. Android.mk中添加宏定义

    在Boardconfig.mk 中添加一个 IS_FLAG := true 由于Boardconfig.mk和各目录的Android.mk是相互关联的 所以我们可以在Android.mk 中添加 一个 ...

  5. Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令

    Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...

  6. Android开发中常用的库总结(持续更新)

    这篇文章用来收集Android开发中常用的库,都是实际使用过的.持续更新... 1.消息提示的小红点 微信,微博消息提示的小红点. 开源库地址:https://github.com/stefanjau ...

  7. 【转】Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES

    看原文请移步:Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES 我在先前的两篇post 编写Android.mk中的LOCAL_SRC_F ...

  8. [转]编写 android.mk 中 LOCAL_C_INCLUDES 的技巧

    看原文请移步:编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录 ...

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

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

随机推荐

  1. 第7章 "敏捷+"项目管理

    7.1  导入敏捷项目管理的步骤 1.导入敏捷的步骤 (1).培训 (2).教练与引导 (3).内化 2.敏捷混合型模式 7.2  项目启动与敏捷合同 1.敏捷项目启动 2.敏捷签约模式 在传统项目管 ...

  2. Kali Linux渗透测试实战 2.2 操作系统指纹识别

    目录 2.2 操作系统指纹识别 2.2.1 Banner抓取 2.2.2 TCP 和 ICMP 常规指纹识别技术 TCP数据报格式 ICMP首部格式 TTL与TCP窗口大小 FIN探测 BOGUS f ...

  3. Azure DevOps Server: 使用Rest Api获取拉取请求Pull Request中的变更文件清单

    需求: Azure DevOps Server 的拉取请求模块,为开发团队提供了强大而且灵活的代码评审功能.拉取请求中变更文件清单,对质量管理人员,是一个宝贵的材料.质量保障人员可以从代码清单中分析不 ...

  4. DevExpress中获取GridControl排序之后的List

    public System.Collections.IList GetGridViewFilteredAndSortedData(DevExpress.XtraGrid.Views.Grid.Grid ...

  5. JQuery Mobile - html5+CSS 禁止IOS长按复制粘贴实现

    因为在移动端APP需要实现长按执行别的事件,但是在IOS系统有默认的长按选择复制粘贴,禁止此功能在网上找了很多资料,最终整理出目前最好的解决方法.实际测试,也并不是很理想,但是可能没有更好办法了! / ...

  6. linux shell实现批量关闭局域网中主机端口

    假设局域网中有多台主机,只能开通ssh服务(端口22),如果发现其他服务打开,则全部关闭.通过运行一个shell脚本,完成以上功能.在实际运维中,可以通过puppet等工具更快更好的完成这个功能,所以 ...

  7. 微信小程序实现给循环列表点击添加类(单项和多项)

    在微信小程序里面没有DOM对象, 不能操作DOM. 所有的操作通过数据来实现,下面主要实现了给循环列表点击添加类的操作 一.单项 目标需求:实现下图,给点击的view增加类,每次只能选择一个. 主要思 ...

  8. D02-R语言基础学习

    R语言基础学习——D02 20190423内容纲要: 1.前言 2.向量操作 (1)常规操作 (2)不定长向量计算 (3)序列 (4)向量的删除与保留 3.列表详解 (1)列表的索引 (2)列表得元素 ...

  9. JAVA动态代理和方法拦截(使用CGLib实现AOP、方法拦截、委托)

    AOP用CGLib更简便.更可控. 动态代理的实现非常优雅. 实体类: public class SampleClass { public String MyFunction1(String inpu ...

  10. flask~数据库

    flask与数据库的连接基于flaks_sqlaichemy 扩展 首先要连接数据库的时候必须得先下载 pip install flask-sqlalchemy 这个扩展 flask框架与数据库的连接 ...