Android.mk文件简单分析
Android.mk文件简单分析
一个Android.mk文件用来向编译系统描写叙述须要编译的源码。详细来说:该文件是GNUMakefile的一小部分。会被编译系统解析一次或多次。
能够在每个Android.mk中定义一个或多个模块,也能够在几个模块中使用同一个源码文件。
每一个模块属下列类型之中的一个:
1)APK程序。一般的Android程序,编译打包生成apk文件
2)JAVA库,java类库,编译打包生成jar文件
3) C\C++应用程序,可运行的C\C++应用程序
4)C\C++静态库,编译生成C\C++静态库,并打包成.a文件
5)C\C++共享库, 编译生成共享库(动态链接库),并打包成.so, 有且仅仅有共享库才干被安装/拷贝到应用软件(APK)包中。
一个简单的样例
一个简单的"hello world",比方以下的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
对应的Android.mk文件会像以下这样:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := helloworld LOCAL_SRC_FILES := helloworld.c include $(BUILD_SHARED_LIBRARY)
简单说明:
1。LOCAL_PATH := $(call my-dir)。一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个样例中,宏函数‘my-dir’,由编译系统提供。用于返回当前路径(即包括Android.mk文件的文件夹)。
2,include $( CLEAR_VARS)。CLEAR_VARS由编译系统提供((能够在 android 安装文件夹下的/build/core/config.mk文件看到其定义,为 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk)),指定让GNU MAKEFILE为你清除很多LOCAL_XXX变量(比如 LOCAL_MODULE,LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH。这是必要的,由于全部的编译控制文件都在同一个GNU MAKE运行环境中。全部的变量都是全局的。
3,LOCAL_MODULE := helloworld,LOCAL_MODULE变量必须定义,以标识你在Android.mk文件里描写叙述的每一个模块。名称必须是唯一的,并且不包括不论什么空格。
注意编译系统会自己主动产生合适的前缀和后缀,换句话说。一个被命名为'foo'的共享库模块。将会生成'libfoo.so'文件。
4,LOCAL_SRC_FILES := helloworld.c。LOCAL_SRC_FILES变量必须包括将要编译打包进模块中的C或C++源码文件。注意,你不用在这里列出头文件和包括文件,由于编译系统将会自己主动为你找出依赖型的文件;只列出直接传递给编译器的源码文件就好。
其它经常使用的还有:
5,LOCAL_C_INCLUDES:可选变量,表示头文件的搜索路径。
默认的头文件的搜索路径是LOCAL_PATH文件夹。
演示样例:LOCAL_C_INCLUDES := sources/foo或LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
6,TARGET_ARCH:目标 CPU平台的名字;TARGET_PLATFORM:Android.mk解析的时候,目标 Android平台的名字。ARGET_ARCH_ABI:临时仅仅支持两个 value,armeabi和 armeabi-v7a
7。LOCAL_STATIC_LIBRARIES:表示该模块须要使用哪些静态库。以便在编译时进行链接。
8,LOCAL_SHARED_LIBRARIES: 表示模块在执行时要依赖的共享库(动态库),在链接时就须要,以便在生成文件时嵌入其对应的信息。
9,LOCAL_LDLIBS: 编译模块时要使用的附加的链接器选项。
10。LOCAL_ARM_MODE:默认情况下, arm目标二进制会以 thumb的形式生成(16 位)。你能够通过设置这个变量为 arm假设你希望你的 module是以 32 位指令的形式
11,LOCAL_CFLAGS: 可选的编译器选项,在编译 C 代码文件的时候使用
12,include $(call all-subdir-makefiles):返回一个位于当前'my-dir'路径的子文件夹中的全部Android.mk的列表。
----------------------
另外:
在Android.mk文件里,还能够指定最后的目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用下面的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统out/target/product/generic/root。
TARGET_OUT:表示system文件系统out/target/product/generic/system。
TARGET_OUT_DATA:表示data文件系统out/target/product/generic/data。
OUT_DIR:代码project编译时的out生成文件夹
PRODUCT_OUT:映象生成文件夹
相关文章
- iPhone上安装Android系统详细步骤
- Android Studio(九):引用jar及so文件
- [Android Pro] 通过Android trace文件分析死锁ANR
- Android系统的定制---定制系统开机动画
- Android事件传递机制
- android 时间控件概述
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
- Android开发学习---使用XmlPullParser解析xml文件
- android:inputType参数类型说明
- android开发笔记之android.mk文件
- android.mk 强制编译,android.mk文件的编译
- Android 拷贝SQLite数据库文件到手机的内部存储
- Android Device Monitor中File Explorer的db文件如何导出到桌面
- Android 10.0 init.rc中data下创建文件节点失败
- 【Android 逆向】Android 系统文件分析 ( 根目录下的目录和文件 | /data/ 应用和用户数据目录 | /mnt/ 挂载其它设备目录 )
- 【Android 热修复】热修复原理 ( 加载 Dex 文件到内存中 | DexClassLoader | PathClassLoader | 反射 Element[] dexElements )
- 【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件对齐 )
- 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )
- 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )
- Android - 文件读写操作 总结
- Android lsof查看已打开文件(七十八)
- Android万能分辨率适应法
- ConnectivityService: Neither user 10146 nor current process has android.permission.ACCESS_NETWORK_ST
- Android Studio的签名打包后报错提示:Lint found fatal errors while assembling a release target