参考站点:
http://blog.youkuaiyun.com/zhandoushi1982
Android.mk在编译系统中的作用
Android.mk用于描述将一包源文件以何种模块形式编译到Android系统中常用的模块形式如下 例子可从Android4.4源码下载:
1、APK程序 例子:frameworks/base/core/res/Android.mk
2、JAVA库 例子:frameworks/base/services/java/Android.mk
3、C\C++应用程序 例子:frameworks/base/cmds/app_process/Android.mk
4、C\C++静态库 例子:frameworks/native/libs/binder/Android.mk
5、C\C++共享库 例子:frameworks/base/services/jni/Android.mk
6、保持原格式 例子:frameworks/base/data/fonts/Android.mk
公共部分
1、LOCAL_PATH := $(call my-dir) 参见build/core/definitions.mk 用于返回当前路径
2、include $(CLEAR_VARS) 参见build/core/config.mk 用于清除环境变量
3、LOCAL_MODULE := XXX LOCAL_MODULE变量必须定义且唯一
4、LOCAL_SRC_FILES := XXX.zzz LOCAL_SRC_FILES变量可以根据最终要编译的模块形式选择多种格式的文件(java/jar/c/cpp/a/so)非源码且非编译中间文件可用BUILD_PREBUILT参数将源文件编译到系统中
5、LOCAL_MODULE_PATH := XXX 将模块输出到哪个目录 可取如下内容:
TARGET_ROOT_OUT: out/target/product/xxxxx/root
TARGET_OUT: out/target/product/xxxx/system
TARGET_OUT_DATA: out/target/product/xxxx/data
TARGET_OUT_SHARED_LIBRARIES: out/target/product/xxxx/system/lib
TARGET_OUT_APPS: out/target/product/xxxx/system/app
ANDROID_PRODUCT_OUT: out/target/product/xxxx/
TARGET_OUT_JAVA_LIBRARIES: out/target/product/xxxx/system/framework
6、include $(BUILD_XXX_XXX) 将源文件以何种方式编入系统 可取如下内容:
BUILD_EXECUTABLE
BUILD_STATIC_LIBRARY
BUILD_SHARED_LIBRARY
BUILD_PACKAGE
BUILD_STATIC_JAVA_LIBRARY
BUILD_PREBUILT
可选部分 I
7、LOCAL_C_INCLUDES:定义头文件的搜索路径
8、LOCAL_CFLAGS:定义宏
9、LOCAL_STATIC_LIBRARIES:引入静态库
10、LOCAL_SHARED_LIBRARIES:引入动态库
11、LOCAL_DEX_PREOPT: 是否做odex优化
可选部分 II
12、include $(call all-subdir-xxx):望文生义 参见build/core/definitions.mk
13、置空 用于屏蔽子目录的Android.mk