Android mk 文件说明

45 阅读2分钟

LOCAL_PATH := $(call my-dir)    # 设置路径,定义当前 Android.mk 文件所在的目录为根目录。
include $(CLEAR_VARS)           # 清除变量,清除所有以 LOCAL_ 开头的变量,确保模块定义是干净独立的。
LOCAL_MODULE := VwCopilotLauncher # 模块名称,定义生成的模块名称(用于编译系统引用)。
LOCAL_MODULE_TAGS := optional   # 模块标签,标记此模块是可选的,即使在非 user 或 userdebug 版本中也会被包含。
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk # 源文件,指定模块的源文件是当前目录下的预编译 APK 文件 VwCopilotLauncher.apk。
LOCAL_MODULE_CLASS := APPS      # 模块类型,指定这是一个 Android 应用模块。
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) # 文件后缀,设置模块的后缀为 .apk。
LOCAL_PRIVILEGED_MODULE := true # 高权限应用,标记此应用为特权应用。它将被安装到 /system/priv-app 目录下,拥有访问受保护系统 API 的权限。
LOCAL_SYSTEM_EXT_MODULE := true # 安装分区,标记此模块将被安装到 /system_ext 分区,这是 Android 10+ 版本中用于 OEM 或定制化系统组件的分区。
LOCAL_CERTIFICATE := platform   # 签名证书,指定使用 platform 证书进行签名。这允许该应用获得系统级权限,通常用于 Launcher 或其他核心系统组件。
LOCAL_OVERRIDES_PACKAGES := CarLauncher # 覆盖包名,重要! 指定此模块将替换原有的 CarLauncher 包。这意味着 VwCopilotLauncher 将成为设备上的默认 Launcher。
LOCAL_REQUIRED_MODULES := com.vwcopilot.launcher.xml # 依赖模块,声明此模块依赖于下面定义的 com.vwcopilot.launcher.xml 模块。
LOCAL_DEX_PREOPT := true # DEX 预优化,开启 DEX 预优化,在编译时进行部分优化,以减少设备首次启动或应用首次运行时的优化时间。
LOCAL_DEX_PREOPT_PROFILE_GUIDED := true # 基于 Profile 的 DEX 优化,开启基于配置文件的预优化,进一步优化启动速度。
LOCAL_PREBUILT_JNI_LIBS := \ 
    lib/arm64-v8a/lib_burst_generated.so \ # 预编译 JNI 库,指定 APK 中包含的预编译 JNI 库(Native Libraries),它们位于 APK 的 lib/arm64-v8a 目录下。这些库通常用于高性能计算或集成第三方 SDK(如这里的 AMapSDK 导航库)。
include $(BUILD_PREBUILT)   # 构建预编译模块,通知编译系统使用以上定义的变量来构建预编译的应用模块。

include $(CLEAR_VARS)               # 清除变量,再次清除变量,开始定义第二个模块。
LOCAL_MODULE := com.vwcopilot.launcher.xml # 模块名称,定义这个配置文件的模块名称。
LOCAL_MODULE_TAGS := optional       # 模块标签,标记为可选。
LOCAL_SRC_FILES := $(LOCAL_MODULE)  # 源文件,指定源文件就是当前目录下的 com.vwcopilot.launcher.xml。
LOCAL_MODULE_CLASS := ETC           # 模块类型,指定这是一个配置或杂项文件(ETC - Etcetera)。
LOCAL_MODULE_PATH := ${TARGET_OUT_SYSTEM_EXT}/etc/permissions # 安装路径,重要! 指定该 XML 文件最终要安装到 /system_ext/etc/permissions 目录下。这通常是用来定义平台签名应用(如 VwCopilotLauncher)所需要的特殊权限或功能。
include $(BUILD_PREBUILT) 			# 构建预编译模块,通知编译系统构建这个预编译的配置模块。

这个 Android.mk 文件的目的是将应用集成为系统应用,集成到车辆的 /system_ext 分区,并将其设置为默认的 CarLauncher。它通过使用 platform 签名和特殊的 XML 权限文件,确保该应用拥有运行核心车载 HMI 所需的所有系统级权限。