Android.mk基本语法

1,443 阅读1分钟

Android.mk例子

说明下每一句的作用

LOCAL_PATH := $(call my-dir)	         //指定路径当前文件夹
include $(CLEAR_VARS)			//清除原本设定的变量,就是LOCAL_XXX, 除了LOCAL_PATH

LOCAL_SRC_FILES:=       \		//指定要编译的source文件
    jni/XXXUtils.cpp \
    jni/XXXService.cpp \

LOCAL_SHARED_LIBRARIES := \		//指定需要连接的动态库,即.so文件
	libutils \
	libbinder \
	libandroid_runtime \
	libcutils \
	libmedia \
	libmediaplayerservice \

LOCAL_C_INCLUDES :=  \		//头文件目录,这里指的是JNI的头文件和源码framework下指定的include目录
	$(JNI_H_INCLUDE) \
	$(TOP)\frameworks\av\include \

LOCAL_MODULE_TAGS := optional		//指明该模块在所有的版本都编译(user版本,eng版本,test版本)
LOCAL_PROGUARD_ENABLED := disabled	//这是代码混淆标识,disable就是不需要混淆
LOCAL_PRELINK_MODULE := false		//这个是动态库需要预先加载与否的标识,系统默认是需要的
LOCAL_MODULE:= libXXXUtils		//编译的库的名字
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE)   //就是说把这个模块打包到系统镜像中

include $(BUILD_SHARED_LIBRARY)		//模块编译为动态库,即libXXXUtils.so

include $(CLEAR_VARS)	//上面已经说了作用,看到这个标识,就知道到此结束一个模块,开始新的一个模块了

LOCAL_STATIC_JAVA_LIBRARIES := fluent-hc-4.3.3  httpmime-4.3.3	//使用到的java静态库,就是jar包
LOCAL_JAVA_LIBRARIES := XXX			//也是说要用到这个jar
LOCAL_SRC_FILES := \		//已经说了,然后这里使用(call 	all-subdir-java-files)获取所有子文件夹下的java文件
         $(call all-subdir-java-files) \
		 src/com/XXX/aidl/ICallBack.aidl \
		 src/com/XXX/aidl/XXX.aidl \
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += $(call all-java-files-under, src-pay)
LOCAL_SRC_FILES += src/com/XXX/IControl.aidl \
LOCAL_PACKAGE_NAME := XXX	//生成的package的名字,也就是APK名字

#LOCAL_CERTIFICATE := shared			//使用的签名,这里是share
LOCAL_CERTIFICATE := platform			//使用系统的签名

LOCAL_OVERRIDES_PACKAGES := Home		//改标志是说Home.apk不变编译到系统中
LOCAL_PROGUARD_ENABLED := obfuscation	//使混淆
LOCAL_PROGUARD_FLAG_FILES := proguard.cfg	//指定混淆的机制文件

include $(BUILD_PACKAGE)			//模块编译为XXX.apk

include $(CLEAR_VARS) 				//上面已经说了
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \	//指定上面使用的第三方的jar包的路径
	fluent-hc-4.3.3:libs/fluent-hc-4.3.3.jar \
	httpmime-4.3.3:libs/httpmime-4.3.3.jar 

include $(BUILD_MULTI_PREBUILT) 		//引入第三方so和jar需要用此编译

相关扩展:

宏:像my-dir这种被称为宏,下面是一些宏,必须通过使用'$(call )'来求值,他们返回文本化的信息。 

 1、my-dir 

 返回当前Android.mk所在的目录路径,在Android.mk文件的开头一般如此定义: LOCAL_PATH := $(call my-dir) 

 2、all-subdir-makefiles  

返回一个位于当前'my-dir'路径的子目录列表。例如,看下面的目录层次: sources/foo/Android.mk 

 sources/foo/lib1/Android.mk 

 sources/foo/lib2/Android.mk 

 如果sources/foo/Android.mk包含一行: include $(call all-subdir-makefiles) 那么它就会自动包含sources/foo/lib1/Android.mk 和sources/foo/lib2/Android.mk ;

这项功能用于向编译系统提供深层次嵌套的代码目录层次。在默认情况下,只搜索在sources/*/Android.mk。