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

相关推荐