详谈Android编译命令

2019-12-10 18:36:09王旭

为方便模块编译,编译系统设置了很多的编译环境变量,如下:

LOCAL_SRC_FILES:当前模块包含的所有源码文件;
LOCAL_MODULE:当前模块的名称(具有唯一性);
LOCAL_PACKAGE_NAME:当前APK应用的名称(具有唯一性);
LOCAL_C_INCLUDES:C/C++所需的头文件路径;
LOCAL_STATIC_LIBRARIES:当前模块在静态链接时需要的库名;
LOCAL_SHARED_LIBRARIES:当前模块在运行时依赖的动态库名;
LOCAL_STATIC_JAVA_LIBRARIES:当前模块依赖的Java静态库;
LOCAL_JAVA_LIBRARIES:当前模块依赖的Java共享库;
LOCAL_CERTIFICATE:签署当前应用的证书名称,比如flatform。
LOCAL_MODULE_TAGS:当前模块所包含的标签,可以包含多标签,可能值为debgu,eng,user,development或optional(默认值)

针对这些环境变量,编译系统还定义了一些便捷函数,如下:

$(call my-dir):获取当前文件夹路径;
$(call all-java-files-under, <src>):获取指定目录下的所有Java文件;
$(call all-c-files-under, <src>):获取指定目录下的所有C文件;
$(call all-Iaidl-files-under, <src>) :获取指定目录下的所有AIDL文件;
$(call all-makefiles-under, <folder>):获取指定目录下的所有Make文件;
示例:

 LOCAL_PATH := $(call my-dir) 
 include $(CLEAR_VARS) 
  
 # 获取所有子目录中的Java文件
 LOCAL_SRC_FILES := $(call all-subdir-java-files) 
  
 # 当前模块依赖的动态Java库名称
 LOCAL_JAVA_LIBRARIES := com.gityuan.lib 
  
 # 当前模块的名称
 LOCAL_MODULE := demo 
  
 # 将当前模块编译成一个静态的Java库
 include $(BUILD_STATIC_JAVA_LIBRARY)