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 ...
随机推荐
- DelphiXE7中创建WebService(服务端+客户端) good
相关资料:http://www.2ccc.com/news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...
- 15个最好的HTML5前端响应式框架(2014)
文中的多个框架基于SASS创建,SCSS是一种比LESS更简洁的样式表编程语言,它能够编绎成CSS,可复用CSS代码,声明变量,甚至是函数,类Ruby/Python的语法.參见: LESS vs SA ...
- Ubuntu14.04搭建android开发环境
一 下载ADT 官方下载地址:http://developer.android.com/sdk/index.html(须要FQ或者改动host) 二 解压 1 使用终端将下载的文件解压当前文件夹下: ...
- Git使用之搭建基于SSH的Gitserver(上篇)
1. 须要软件 msysgit (Gitfor Windows) Copssh (OpenSSHfor Windows,新版本号已经開始收费了大家能够去搜索引擎找曾经的免费版Copssh_4.1.0下 ...
- 最佳新秀SSH(十三)——Spring集装箱IOC分析和简单的实现
时间最近一段时期,"集装箱"这个词一直萦绕在我的耳边,连吃饭.睡在我的脑海里蹦来蹦去的. 由于这几天的交流时间.讨论,对于理解容器逐渐加深. 理论上的东西终归要落实到实践,今天就借 ...
- ASA基本配置
拓扑如下: ASA5520# show running-config : Saved:ASA Version 8.0(2) !hostname ASA5520enable password 2KFQn ...
- (step6.1.4)hdu 1102(Constructing Roads——最小生成树)
题目大意:输入一个整数n,表示村庄的数目.在接下来的n行中,每行有n列,表示村庄i到村庄 j 的距离.(下面会结合样例说明).接着,输入一个整数q,表示已经有q条路修好. 在接下来的q行中,会给出修好 ...
- C#基础总结之Attribute
Attribute是什么 Attribute的中文姓名 为什么我要拿一段文字来说Attribute的中文姓名呢?答案是:因为这很重要.正所谓“名”不正,则言不顺:另外重构手法中有一种很重要的方法叫重命 ...
- windows server 搭建radius服务器
使用ISA 2004搭建PPTP/L2TP 服务器后,VPN账号是在radius服务器上的,使用window server 2003搭建radius服务器,需要添加组件->internet验证服 ...
- SE 2014年4月8日
1.路由引入的作用? 当网络中运行多种路由协议的时候,由于不同协议的路由算法和度量值等均不相同,路由引入可以将不同协议的路由引入到当前的路由协议中,保证网络的互通. 对比单向入和双向入 单向引入是只将 ...