Android编译系统一
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,则可以这样写$(callsrc)等
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是指系统的nativecode,相对用Java写成的Androidapplication称为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)
#Usethefutexbasedmutexandconditionvariable
#implementationfromandroid-armbecauseit'ssharedmemsafe
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