Android.mk参数解释
--------------------
下面对Android.mk 中经常出现的变量进行讲解
-------------------- 这些变量,你会经常在Android.mk文件中见到,下面以字表表的顺序列出来,并进行一一讲解其作用。 LOCAL_- 这个变量会在每个模块(module,也可以解释为程序). 当出现 include $(CLEAR_VARS)变量的时候,它们当初设置的变量,会清空。在你使用的大部分变量中,它存在于模块中的定义都会像 LOCAL_variables(variables 为变量的名字) PRIVATE_- 这个是定义私有的变量。 只有有特别的模块中,这个变量才有起效。 HOST_ 和 TARGET_- 定义编译生成的文件是运行在什么平台的。 不要随便使用 HOST_ 或者是 TARGET_ 变量在你的makefile(对应的文件是Android.mk文件)文件中。 BUILD_ 和 CLEAR_VARS 变量 , 它们是已经预先定义的模块makefile文件。下面提供一个简单的例子: CLEAR_VARS 和 BUILD_HOST_PACKAGE ----------------------------------------正式讲解----------------------- 变量名: 描述:
LOCAL_AAPT_FLAGS
LOCAL_ACP_UNAVIAILABLE
LOCAL_ADDITIONAL_JAVA_DIR
LOCAL_AIDL_INCLUDES
LOCAL_ALLOW_UNDEFINED_SYMBOLS
LOCAL_ARM_MODE ARM使用的模式
LOCAL_ASFLAGES
LOCAL_ASSET_DIR
-----------------------------------------------
LOCAL_ASSERT_FILES Android.mk中定义的模块需要包含 'include $(BUILD_PACKAGE)' ,一般形式:
LOCAL_ASSET_FILES += $(call find-subdir-assets)
--------------------------------- LOCAL_BUILD_MODULE_STEM
----------------------------------------------------- LOCAL_C_INCLUDES 当编译C/C++文件的时候,这个变量指定的路径是用于编译器查找头文件的。例子:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
-----------------------------------------------------
---------------------
LOCAL_CC 如果你想使用第三方的C编译器,编译当前的程序。就用LOCAL_CC设置第三方编译的位置
------------------------------- LOCAL_CERTIFICATE 签名用的证书的名字 ,也可以用于指明特别的签名证书(例如自己创建的证书) LOCAL_CFLAGS 如果需要给C/C++编译传递自己的参数,那么你就需要这个变量了。例子:
LOCAL_CFLAGS += -DLIBBUILTS_NATIVE=1 LOCAL_CLASSPATH
LOCAL_COMPRESS_MODULE_SYMBOLS
LOCAL_COPY_HEADERS 用于复制头文件,需要和LOCAL_COPY_HEADRES_TO 变量一起使用 LOCAL_COPY_HEADERS_TO 需要和LOCAL_COPY_HEADERS 变量一起使用,用于复制头文件
-----------------------------------------------------
LOCAL_CPP_EXTENSION 如果你的C++文件的后序不是cpp,而是其它的,你就需要用这个变量定义一下了。例子:
LOCAL_CPP_EXTENSION := .cc
----------------------------------------------------- -------------------------------
LOCAL_CPPFLAGS 这个用于传递编译指令到唯一的C++编译器中。例子:
LOCAL_CPPFLAGS += -ffriend-injection LOCAL_CPPFLAGS 在编译器接收的指令中,迟于LOCAL_CFLAGS ,所以你可以用它来覆盖LOCAL_CFLAGS定义的指令
---------------------------------- LOCAL_CXX 如果你想用第三方的C++编译器,编译当前的程序或者是模块,你可以使用这个变量,和变量LOCAL_CC的使用方法一样。 LOCAL_DX_FLAGS
LOCAL_EXPORT_PACKAGE_RESOURCES
----------------------------------
LOCAL_FORCE_STATIC_EXECUTABLE 如果你编译的程序,需要被链接成静态文件,不包含动态链接,作如下的设置: LOCAL_FORCE_STATIC_EXECUTABLE := true 。 这样编译出来的程序可以在没有动态库支持的根目录下面运行。
-------------------------------- LOCAL_GENERATED_SOURCES 后面的定义的变量,会被自动转换成你所需要的文件的格式 LOCAL_INSTRUMENTATION_FOR
LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME
LOCAL_INTERMEDIATE_SOURCES
LOCAL_INTERMEDIATE_TARGETS
LOCAL_IS_HOST_MODULE LOCAL_JAR_MANIFEST 定义jar文件需要用到的manifest文件 LOCAL_JARJAR_RULES
---------------------------------
LOCAL_JAVA_LIBRARIES 当编译生成java程序或者是库文件的时候,LOCAL_JAVA_LIBRARIES, 定义的是要被编译成程序或者是库的文件。下面来一个简单的例子,需要链接的库文件为core 和 framework.
LOCAL_JAVA_LIBRARIES := core framework 注意: 在Android.mk的模块中设置 LOCAL_JAVA_LIBRARIE ,一般不需要(或者不允许)当编译一个APK 程序,模块中包含了 "include $(BUILD_PACKAGE)"。 那么这些必要的核心文件会自动包含进去。
--------------------------------------- LOCAL_JAVA_RESOURCE_DIRS
LOCAL_JAVA_RESOURCE_FILES
LOCAL_JNI_SHARED_LIBRARIES
-------------------------------------------
LOCAL_LDFLAGS 你可以往链接器(linker)传递一些自己的指令,通过设置 "LOCAL_LDFLAGS"。不过要时刻记住,传递到链接器的参数是非常重要的,必须要事件进行一些测试。 LOCAL_LDLIBS 用于指定一些第三方的动态库或者是静态库文件,需要用-lxxx格式,这些文件不在你的编译计划中。例子:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl, -z,origin
--------------------------------- ------------------------------------
LOCAL_MODULE "LOCAL_MODULE" 是一个你定义在Android.mk文件中的一个程序的名字。例如,库文件"libkjs", 相应的对应为: LOCAL_MODULE 是 "libkjs"(编译的平台会自动给它加上后序,例如 .so, .dylib, .dll)。对于 APK程序,将会使用LOCAL_PACKAGE_NAME 而不是 LOCAL_MODULE ------------------------------------ -------------------------------------
LOCAL_MODULE_PATH 告诉编译平台,如何把编译出来的程序或者是模块放到特定的位置。如果你需要定义这个变量,确保你同时定义了"LOCAL_UNSTRIPPED_PATH" 如果你编译生成的文件是可执行文件或者是动态库,这样就可以确保没有去符号(unstripped)链接的二进制文件有位置可去了。如果你没有进行定义,就有可能发生错误----------------------------------------- LOCAL_MODULE_STEM
---------------------------------------------
LOCAL_MODULE_TAGS 用于指定生成的程序是什么类型的。有以下的几个变量:
user: 将会使用 user/userdebug模式去编译程序
eng: 将会使用 eng模式去编译程序
tests: 将会使用testing模式编译程序
optional: 不建议使用这个模式 --------------------------------------- LOCAL_NO_DEFAULT_COMPILER_FLAGS
LOCAL_NO_EMMA_COMPILER
LOCAL_NO_EMMA_INSTRUMENT
LOCAL_NO_STANDARD_LIBRARIES
LOCAL_OVERRIDES_PACKAGES
LOCAL_PACKAGE_NAME 用于设置APK程序的名字,例如: Dialer, Contacts
--------------------------------------------
LOCAL_POST_PROCESS_COMMAND 用于生成本机的可执行文件,当程序被编译好后,你可以给它传递一条命令。下面是例子:
module := $(HOST_OUT_EXECUTABLES)/$(LOCAL_MODULE)
LOCAL_POST_PROCESS_COMMAND := /Developer/Tools/Rez -d __DARWIN__ -t APPL\
-d __WXMAC__ -o $(module) Carbon.r
--------------------------------------------------- --------------------------------------
LOCAL_PREBUILT_EXECUTABLES 当Android.mk文件中包含 $(BUILD_PREBUILT) 或者是 $(BUILD_HOST_PREBUILT), 你可以使用这个变量去定义,你要复制到哪个目录。这样它就可以自动被复制到特定的目录了。
------------------------------------ LOCAL_PREBUILT_JAVA_LIBRARIES LOCAL_PREBUILT_LIBS 解释和LOCAL_PREBUILT_EXECUTABLES 一样。 LOCAL_PREBUILT_OBJ_FILES
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE ---------------------
LOCAL_REQUIRED_MODULES 不知道怎样解释,直接上英文:
Set LOCAL_REQUIRED_MODULES to any number of whitespace-separated module names, like "libblah" or "Email". If this module is installed, all of the modules that it requires will be installed as well. This can be used to, e.g., ensure that necessary shared libraries or providers are installed when a given app is installed.
-------------------------------- LOCAL_RESOURCE_DIR
LOCAL_SDK_VERSION 设置本地的sdk版本号 ------------------------------
LOCAL_SHARED_LIBRARIES 定义的内容为要链接的动态库的名字,不需要后序。例子:
LOCAL_SHARED_LIBRARIES := \
libutils \
libui \
libaudio \
libexpat \
libsgl
--------------------------------- ----------------------
LOCAL_SRC_FILES 编译系统会查找 定义在LOCAL_SRC_FILES后面的值,去查找需要编译的源代码,例如 *.c, *.cpp, *.y, *.l, *.java。对于lex 和 yacc文件,需要定义一下传递的指令。如果是C/cpp,它会自动处理。如果包含的文件在二级目录下面,也可以直接进行定义。例子:
LOCAL_SRC_FILES := \
file1.cpp \
dir/file2.cpp
---------------------------- LOCAL_STATIC_JAVA_LIBRARIES LOCAL_STATIC_LIBRARIES 解释和LOCAL_SHARED_LIBRARIES大致一样。不过这次要链接的是静态库文件。 LOCAL_UNISTALLABLE_MODULE
--------------------------
LOCAL_UNSTRIPPED_PATH 定义放置没有去符号链接的文件的位置,如果你同时定义了LOCAL_MODULE_PATH ,而编译的程序是可执行程序或者是动态库文件。那么出现错误是在所难免的。
---------------------------- -------------------------------------
LOCAL_WHOLE_STATIC_LIBRARIES 用于把静态库链接到程序中,而不允许链接器去掉其中没有用的符号链接。如果你想把静态库编译进动态库中,而在静态库中已经包含了动态库中的符号链接,这个时候就特别有用了。
例子:
LOCAL_WHOLE_STATIC_LIBRARIES := \
libsqlite3_android
------------------------------ -----------------------------------------
LOCAL_YACCFLAGS 用于把编译指令传递给yacc模块。例子:
LOCAL_YACCFLAGS := -p kjsyy
--------------------------------------- OVERRIDE_BUILD_MODULE_PATH
Android.mk参数解释的更多相关文章
- Android.mk具体解释
概述 Android.mk文件用来向编译系统描写叙述怎样编译你的源码.更确切地说,该文件事实上就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量降低源码中声明 ...
- Android.mk文件官方使用说明
本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...
- Android.mk 基本应用
如果是在android源码里面编译我们自己的应用,就需要这个android.mk文件,这个文件就告诉android系统应用如何来编译这个应用以及这个应用它所依赖哪些文件等等信息.我对android.m ...
- Android NDK开发之Android.mk文件
Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南 Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...
- 【转】Android.mk文件语法规范(Android.mk File)
原文网址:http://blog.csdn.net/smfwuxiao/article/details/8530742 1.Android.mk文件概述 Android.mk文件用来告诉NDK编译系统 ...
- Android NDK开发指南---Application.mk文件和android.mk文件
https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https:// ...
- android.mk android源码编译
http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...
- Android.mk文件语法规范及使用模板
Android.mk文件语法详述 介绍:------------这篇文档是用来描述你的C或C++源文件中Android.mk编译文件的语法的,为了理解她们我们需要您先看完docs/OVERVIEW.h ...
- NDK 开发(Android.mk配置)
在我写这篇文章的时候,Android Studio已经是2.3版本了,已经集成CMake 编译工具, 用户只需在 新建项目的时候,添加选项(Include C++ support),Andr ...
随机推荐
- Mqtt协议IOS移植完1
MQTTClient.h #import <Foundation/Foundation.h> @protocol MQTTDelegate <NSObject> /** * @ ...
- ORACLE—005:创建JOB(二)
假设须要创建带參数的job,怎样创建呢. 我们直接将參数声明.并赋值.然后传给job调用的存储过程就可以. 比如.存储过程名为Pro_Test_JOB,參数共同拥有一个.是VARCHAR2类型. 创建 ...
- 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区
以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...
- Error : APP-FND-01926: The custom event WHEN-LOGON-CHANGED raised unhandled exception: ORA-06502: PL
In this Document _afrLoop=440418974213449&id=1508865.1&_afrWindowMode=0&_adf.ctrl-stat ...
- Hama学习总结
Hama学习笔记 1. Hama定义 Hama是基于HDFS上的BSP模型实现,其执行不须要MapReduce. 例证例如以下: 在单点调试的Hama系统上,仅仅执行NameNode.Da ...
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...
- coding 除了托管外,还能进行团队协作.
coding 除了托管外,还能进行团队协作. oschina 也是非常不错的.
- AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式
HTTP请求中,假设是get请求,那么表单參数以name=value&name1=value1的形式附到url的后面,假设是post请求,那么表单參数是在请求体中,也是以name=value& ...
- Java的内存泄漏和垃圾回收机制
JAVA会产生内存泄露吗?首先,答案是肯定的. Java尽管有垃圾回收器,但依旧存在泄漏. Java内存泄漏跟C/C++内存泄漏的概念不一样:C/C++的内存泄漏是指Malloc了一些资源.最后没有f ...
- 图像库---Image Datasets---OpenSift源代码---openSurf源代码
1.Computer Vision Datasets on the web http://www.cvpapers.com/datasets.html 2.Dataset Reference http ...