基于Pixel设备构建AAOS时遭遇cts_defaults未定义错误求助
cts_defaults未定义的错误 问题概述
按照谷歌官方指南在Pixel设备(tangorpro)上构建Android 14 AAOS时,构建初期出现多个测试模块依赖未定义cts_defaults模块的错误,导致Soong构建流程失败。
错误详情
[100% 1/1] analyzing Android.bp files and generating ninja file at out/soong/build.aosp_tangorpro_car.ninja FAILED: out/soong/build.aosp_tangorpro_car.ninja cd "$(dirname "out/host/linux-x86/bin/soong_build")" && BUILDER="$PWD/$(basename "out/host/linux-x86/bin/soong_build")" && cd / && env -i "$BUILDER" --top "$TOP" --soong_out "out/soong" --out "out" --soong_variables out/soong/soong.aosp_tangorpro_car.variables -o out/soong/build.aosp_tangorpro_car.ninja --globListDir aosp_tangorpro_car --globFile out/soong/globs-aosp_tangorpro_car.ninja -l out/.module_paths/Android.bp.list --available_env out/soong/soong.environment.available --used_env out/soong/soong.environment.used.aosp_tangorpro_car.build Android.bp error: packages/modules/Permission/tests/cts/permission/AppThatRequestContactsPermission15/Android.bp:21:1: "CtsAppThatRequestsContactsPermission15" depends on undefined module "cts_defaults". Or did you mean ["mts_defaults" "sts_defaults"]? error: packages/modules/Permission/tests/cts/permission/AppThatAlsoDefinesPermissionGroupADifferentCert/Android.bp:21:1: "CtsAppThatAlsoDefinesPermissionGroupADifferentCert" depends on undefined module "cts_defaults". Or did you mean ["mts_defaults" "sts_defaults"]? error: packages/modules/HealthFitness/tests/integrationtests/TestApp/Android.bp:49:1: "HCPermsTestAppNoUsageIntent" depends on undefined module "cts_defaults". Or did you mean ["mts_defaults" "sts_defaults"]? error: packages/modules/Permission/tests/cts/permission/AppWithSharedUidThatRequestLocationPermission29/Android.bp:21:1: "CtsAppWithSharedUidThatRequestsLocationPermission29" depends on undefined module "cts_defaults". Or did you mean ["mts_defaults" "sts_defaults"]?
执行的操作步骤
- 代码同步与构建:
mkdir aaos_on_pixel cd aaos_on_pixel REPO_ALLOW_SHALLOW=0 repo init -c -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r30 --use-superproject --partial-clone --partial-clone-exclude=platform/frameworks/base --clone-filter=blob:limit=10M repo sync -j32 - 下载Pixel设备的vendor镜像:
curl --output - https://dl.google.com/dl/android/aosp/google_devices-tangorpro-ap1a.240405.002-8d141153.tgz | tar -xzvf - tail -n +315 extract-google_devices-tangorpro.sh | tar -zxvf - - 应用补丁:
cd packages/services/Car git fetch https://android.googlesource.com/platform/packages/services/Car refs/changes/83/3037383/2 && git cherry-pick FETCH_HEAD #fix the audio crash cd - - 执行构建:
. build/envsetup.sh lunch aosp_tangorpro_car-ap1a-userdebug m
问题分析
cts_defaults是CTS(兼容性测试套件)模块的默认配置集合,通常仅在CTS专属构建目标或完整AOSP分支中定义。AAOS的构建目标(aosp_tangorpro_car)默认不会集成CTS相关模块的依赖定义,导致测试模块找不到该配置。此外,同步代码时使用的--partial-clone-exclude=platform/frameworks/base参数,可能遗漏了包含cts_defaults定义的核心代码文件。
解决办法
方案1:跳过CTS测试模块构建
直接在构建命令中排除CTS相关模块,避免因测试模块依赖问题中断主流程:
m -k --exclude-packages cts
如果需要更精确地排除报错模块:
m -k --exclude-packages CtsAppThatRequestsContactsPermission15 CtsAppThatAlsoDefinesPermissionGroupADifferentCert HCPermsTestAppNoUsageIntent CtsAppWithSharedUidThatRequestsLocationPermission29
-k参数表示遇到错误时继续构建,确保主系统模块能正常编译完成。
方案2:替换依赖的默认配置
根据错误提示的建议,将报错模块中的cts_defaults替换为mts_defaults或sts_defaults。例如,打开packages/modules/Permission/tests/cts/permission/AppThatRequestContactsPermission15/Android.bp,修改:
defaults: ["cts_defaults"],
为:
defaults: ["mts_defaults"],
如果不需要CTS签名等特殊配置,也可以手动添加基础配置替代:
android_app { name: "CtsAppThatRequestsContactsPermission15", // 替换cts_defaults为基础配置 platform_apis: true, certificate: "platform", // 保留原有其他配置... }
方案3:重新同步完整代码
移除同步时的--partial-clone-exclude=platform/frameworks/base参数,拉取包含cts_defaults定义的完整代码:
repo init -c -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r30 --use-superproject --partial-clone --clone-filter=blob:limit=10M repo sync -j32
重新执行构建流程即可。
内容的提问来源于stack exchange,提问作者user3560022

