一、基本用法(‘:=’是赋值;’+='是追加)
#获取当前文件夹的路径
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 1.不管是user 还是eng 版本都会编译此app ;
LOCAL_MODULE_TAGS := optional
# 2.定义编译模块所需的源文件 ;
LOCAL_SRC_FILES := $(call all-java-files-under, src)
# 3.指定 APK 的名字,很重要的变量
LOCAL_PACKAGE_NAME := MyDifferentDislay
# 4.设置后,会使用sdk的hide的api來编译
LOCAL_PRIVATE_PLATFORM_APIS := true
# ? 设置后,编译时忽略系统隐藏类(@hide),就是不能访问系统隐藏的API
#LOCAL_SDK_VERSION := current
#LOCAL_DEX_PREOPT := false
# 5.定义编译完成之后的类型:除了APPS,还有ETC,EXECUTABLES(.bin)SHARED_LIBRARIES(.so)
等选择值
#LOCAL_MODULE_CLASS := APPS
# 7.定义app签名可用选择项platform,shared,media
LOCAL_CERTIFICATE := platform
# 8.将apk编进“/system/priv-app/目录”,如果为false,或者不加这句话,就会编进“/system/app”
目录, 二者区别在于前者的权限要高于后者,即不可卸载
#LOCAL_PRIVILEGED_MODULE := true
LOCAL_STATIC_ANDROID_LIBRARIES := \
? ? ? ? androidx.appcompat_appcompat \
?? ??? ?androidx-constraintlayout_constraintlayout \
?? ??? ?$(ANDROID_SUPPORT_DESIGN_TARGETS) \
?? ??? ?android-support-percent \
? ? ? ? android-support-transition \
? ? ? ? android-support-compat \
LOCAL_USE_AAPT2 := true
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
?
二、参数详解? ?
1、LOCAL_CERTIFICATE?:= platform/shared/media(注意,Android.mk填platform/shared/media这三个中的哪一个是根据AndroidManifest.xml确定的):
(1)platform签名:?
AndroidManifest.xml的manifest节点中添加 android:sharedUserId=”android.uid.system”,?
Android.mk中增加 LOCAL_CERTIFICATE := platform?
(2)shared签名:?
AndroidManifest.xml的manifest节点中增加android:sharedUserId=”android.uid.shared”,?
Android.mk中增加LOCAL_CERTIFICATE := shared?
(3)media签名:?
AndroidManifest.xml的manifest节点中增加 android:sharedUserId=”android.media”,?
Android.mk中增加 LOCAL_CERTIFICATE := media?
2、include $(BUILD_PACKAGE):
include $(BUILD_PREBUILT) ? ? ? ? ? ? ? ?#这种方式把文件当成编译项目,
include $(BUILD_PACKAGE) ? ? ? ? ? ? ? ? #是用来编译生成apk。
include $(BUILD_STATIC_LIBRARY) ? ? ? ? ?#表示编译成静态库
include $(BUILD_SHARED_LIBRARY) ? ? ? ? ?#表示编译成动态库
include $(BUILD_EXECUTABLE) ? ? ? ? ? ? ?#表示编译成可执行程序
include $(BUILD_STATIC_JAVA_LIBRARY) ? ? #表示编译生成静态jar包
3、常用函数:
$(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文件。
#获取Build输入的目标文件夹路径。
$(call intermediates-dir-for, <class>, <app_name>, <host or target>, <common?>)
#在LOCAL_PATH的所有子目录中查找.mk文件,不包括当前目录
$(call first-makefiles-under,$(LOCAL_PATH))
大爷,赏个铜板呗
?
|