构建 Android 时需要先确定要构建的目标(target)。目标旨在反映要构建的目标平台。例如:
sdk_phone64_x86_64-trunk_staging-eng
使用 lunch <target> 命令后,会看到目标和构建环境的概要:
============================================PLATFORM_VERSION_CODENAME=BaklavaPLATFORM_VERSION=BaklavaTARGET_PRODUCT=sdk_phone64_x86_64TARGET_BUILD_VARIANT=engTARGET_ARCH=x86_64TARGET_ARCH_VARIANT=x86_64TARGET_2ND_ARCH_VARIANT=x86_64HOST_OS=linuxHOST_OS_EXTRA=Linux-5.15.0-139-generic-x86_64-Ubuntu-20.04.6-LTSHOST_CROSS_OS=windowsBUILD_ID=MAINOUT_DIR=outSOONG_ONLY=false============================================
注意:必须对每个 shell 运行一次 source envsetup.sh,并且要在 lunch 命令之前运行,因为 lunch 是由 envsetup.sh 定义的。
表示目标的字符串采用以下格式:
lunch product_name-release_config-build_variant
product_name 是要构建的产品的名称。
release_config 是开发版本配置,用于标识位于功能发布标志后面的特定功能和代码,并可为 build 启用或停用这些功能和代码。
build_variant 是build 变体,有三个选择:user、userdebug、eng。
比如这里
TARGET_PRODUCT=sdk_phone64_x86_64TARGET_BUILD_VARIANT=eng
product_name 是 sdk_phone64_x86_64 。
build_variant 是 eng。
release_config 是 trunk_staging。
TARGET_ARCH=x86_64TARGET_ARCH_VARIANT=x86_64
TARGET_ARCH 和 TARGET_ARCH_VARIANT 是目标设备的 CPU 架构和架构变体。
版本配置(release_config)是一个目录,其中包含特定 Android build 的所有标志值文件(已启用和停用某些功能)。例如 trunk_staging。版本配置目录位于 根目录/build/release/aconfig/ 下(下图中AOSP15是我源码的根目录)。
进入 trunk_staging 目录下,有一些命名像是软件包名的目录,其实就是包名,这里重点关注 com.android.wm.shell 这个目录。
进入 com.android.wm.shell ,会有一些textproro文件,这些是配置功能标志的具体文件。
打开 enable_taskbar_on_phones_flag_values 文件,里面的内容如下图:
package 包含与声明中所用软件包名称相同的软件包名称。
name 包含声明中所用名称相同的名称。
state 是 ENABLED 或 DISABLED。
permission 是 READ_WRITE 或 READ_ONLY。通常,对于属于版本配置的标志值文件,permission 会设置为 READ_ONLY。
这里的 enable_taskbar_on_phones 值在Launcher3和SystemUI中都有用到。
其他信息可阅读谷歌官方文档:
https://source.android.google.cn/docs/setup/build/building?hl=zh-cn