Android.mk
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) LOCAL_SRC_FILES:= / com_ura_test_JNITest.c LOCAL_C_INCLUDES := / $(JNI_H_INCLUDE) LOCAL_SHARED_LIBRARIES := libutils LOCAL_PRELINK_MODULE := false LOCAL_MODULE := libJNITest include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH - 编译时的目录
$(call 目录,目录….) 目录引入操作符
如该目录下有个文件夹名称Src,则可以这样写 $(call src) 等
CLEAR_VARS –
在build/core/config.mk 定义 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
详细看build/core/clear_vars.mk
Include 是 *.mk 文件的运算符。可以通过include 包含自定义的.mk文件(即是自定义编译规则)或是引用系统其他的.mk文件(系统定义的编译规则)。
LOCAL_SRC_FILES - 编译的源文件
可以是.c, .cpp, .java, .S(汇编文件)或是.aidl等格式
写法是不同的文件用空格隔开。如果编译目录子目录,采用相对路径,如子目录/文件名。也可以通过$(call 目录),指明编译某目录下所有.c/.cpp/.java/.S/ .aidl文件.
追加文件 LOCAL_SRC_FILES += 文件
LOCAL_C_INCLUDES - 需要包含的头文件目录
可以是系统定义路径,也可以是相对路径. 如该编译目录下有个include目录,写法是include/*.h
LOCAL_SHARED_LIBRARIES - 链接时需要的外部共享库
还有链接的外部静态库用LOCAL_STATIC_LIBRARY
如果是java文件,要加入jar包用LOCAL_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE - 是否需要prelink处理 .Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具.
LOCAL_MODULE - 编译的目标对象
module 是指系统的native code ,相对用Java 写成的 Android application 称为package。Package用LOCAL_PACKAGE_NAME.
BUILD_SHARED_LIBRARY - 指明要编译成动态库。
编译的目标,用include 操作符,动态库会用到系统的编译脚本host_share_library.mk 编译静态库目标,会用到系统的编译脚本host_static_library.mk . 用BUILD_STATIC_LIBRARY来指明要编译成静态库。如果是java文件的话,会用到系统的编译脚本host_java_library.mk,用BUILD_PACKAGE来指明。三个编译脚本都放到build/core目录下。
LOCAL_ARM_MODE := arm
目前Android大部分都是基于Arm处理器的,Arm指令用两种模式Thumb(每条指令两个字节)和arm指令(每条指令四个字节)
LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays
通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
Android.mk 也通过ifeq关键字支持条件选择语句,类如下面
ifeq ($(HOST_OS),linux)
# Use the futex based mutex and condition variable
# implementation from android-arm because it's shared mem safe
LOCAL_SRC_FILES += /
futex_synchro.c /
executablepath_linux.cpp
endif
ifeq ($(HOST_OS),darwin)
LOCAL_SRC_FILES += /
executablepath_darwin.cpp
endif
总结,android.mk 的写法,系统源代码提供了大量的android.mk可以作为参考资料。在编写android.mk的时候,有任何碰到疑问的地方,可以拿系统的android.mk看看, 相信写个android.mk 应该没有什么困难.
参考资料:http://blog.csdn.net/wukunting/article/details/4640100