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 ...
随机推荐
- Button UI Kit CSS3美丽Buttonbutton
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
课程设计要求进行junit测试,我是在已经做好的ssh项目上做的测试,测试类代码如下 package com.zhang.web.services; import static org.junit.A ...
- Eclipse 每次打开workspace目录记录位置?
E:\eclipse_j2ee eclipse安装根目录 在这个文件下: E:\eclipse_j2ee\configuration\.settings\org.eclipse.ui.ide.pref ...
- ExtJs选择器
想要利用ExtJS的库函数对DOM进行各类操作,就要得到Element类型的对象,但是Ext.get()取到的虽然是Element,但是参数只能是id,如果大家对jQuery的selector方式很喜 ...
- birdnest是什么意思_birdnest在线翻译_英语_读音_用法_例句_海词词典
birdnest是什么意思_birdnest在线翻译_英语_读音_用法_例句_海词词典 birdnest
- SE 2014年5月5日
如图配置 某企业网络规划图(三台交换设备/三台路由设备) 接入层 SW1 连接终端用户 汇聚层 SW2 SW3 核心层 R1 R2 R5 1. 如图 SW1 SW2 SW3 物理链路两两相连接,网络中 ...
- Smarty模板引擎的使用
Smarty模板引擎的使用 Smarty是PHP中一个基于MVC模式的模板引擎. Download: http://www.smarty.net/download 特点 1. 最快速度的程序开发 ...
- Oracle 最简单的随系统自己主动启动
Oracle 最简单的随系统自己主动启动 俗话说用户是上帝,他们有时候提出一个问题很的简单,就仅仅须要一句话,一分钟就完事了.可是拿到我们DBA来说,可能至少得半个小时甚至半个月才干满足他的一句话.有 ...
- SWT的文件选择对话框I的使用
swt文件选择框 FileDialog fileselect=new FileDialog(shell,SWT.SINGLE); fileselect ...
- 【android自己定义控件】自己定义View属性
1.自己定义View的属性 2.在View的构造方法中获得我们自己定义的属性 3.重写onMesure 4.重写onDraw 3这个步骤不是必须,当然了大部分情况下还是须要重写的. 1.自己定义Vie ...