LOCAL_PATH:= $(call my-dir)
android.mk的第一行一般都是它,用来表面当前的路径是my-dir,也就是android.mk所在路径,它有一个硬性规定:必须放在include $(CLEAR_VARS)之前,当然了它都是第一行,肯定在include $(CLEAR_VARS)之前了;
include $(CLEAR_VARS)
CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译;
eng: 指该模块只在eng版本下才编译;
tests: 指该模块只在tests版本下才编译;
optional:指该模块在所有版本下都编译;
LOCAL_STATIC_ANDROID_LIBRARIES := \
android-support-v13 \
android-support-v4 \
android-support-compat
加入Android库;
LOCAL_STATIC_JAVA_LIBRARIES := android-ex-camera2-portability
LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit
LOCAL_STATIC_JAVA_LIBRARIES += glide
LOCAL_STATIC_JAVA_LIBRARIES += guava
LOCAL_STATIC_JAVA_LIBRARIES += jsr305
当前模块依赖的 Java 静态库;
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd_gcam)
标记源文件,这里是src、src_pd、src_pd_gcam文件夹下的所有java文件,如果有C/C++也需要加到LOCAL_SRC_FILES 下;
LOCAL_RESOURCE_DIR += \
$(LOCAL_PATH)/res \
$(LOCAL_PATH)/res_p
资源文件目录
include $(LOCAL_PATH)/version.mk
引入version.mk;
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--version-name "$(version_name_package)" \
--version-code $(version_code_package) \
AAPT即Android Asset Packaging Tool的标志位;
LOCAL_USE_AAPT2 := true
使用AAPT2打包;
LOCAL_PACKAGE_NAME := Camera2
包名;
LOCAL_SDK_VERSION := current
这句话,貌似是指定SDK版本,然而网上都说加了它就不能访问Hide的API了;
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
proguard.flags是一个代码混淆的文件;
LOCAL_JAVA_LIBRARIES += org.apache.http.legacy
当前模块依赖的java库;
LOCAL_JNI_SHARED_LIBRARIES := libjni_tinyplanet libjni_jpegutil
表示模块在运行时要依赖的共享库(动态库),在链接时就需要,以便在生成文件时嵌入其相应的信息;
include $(BUILD_PACKAGE)
这句话就一个执行语句,把上面的设置好的变量开始执行,BUTLD_PACKAGE这个就是表示编译成一个APK
include $(call all-makefiles-under, $(LOCAL_PATH))
include目录下所有的mk文件,这里面有两个坑,
- 只include Android.mk文件,叫其他名字的mk文件,不include;
- 只include这个$(LOCAL_PATH)一级目录下的Android.mk文件,而不是所有子目录以及子目录下的Android.mk文件;