M1 Mac构建AOSP OTA包失败,缺失brillo_update_payload如何解决?
问题背景
已在M1 MacBook完成AOSP环境搭建,通过以下命令可成功完成全量构建:
source build/envsetup.sh lunch m
执行make otapackage构建OTA包时,因darwin平台默认禁用otatools,修改了build/make/core/Makefile配置:
ifeq ($(BUILD_OS),darwin) build_ota_package := true build_otatools_package := true else
重新全量构建后再次执行make otapackage,出现如下错误:
> make otapackage ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=10 TARGET_PRODUCT=aosp_sunfish TARGET_BUILD_VARIANT=userdebug TARGET_BUILD_TYPE=release TARGET_ARCH=arm64 TARGET_ARCH_VARIANT=armv8-a TARGET_CPU_VARIANT=generic TARGET_2ND_ARCH=arm TARGET_2ND_ARCH_VARIANT=armv8-a TARGET_2ND_CPU_VARIANT=generic HOST_ARCH=x86_64 HOST_OS=darwin HOST_OS_EXTRA=Darwin-21.6.0-x86_64-12.6 HOST_BUILD_TYPE=release BUILD_ID=QD4A.200805.003 OUT_DIR=out PRODUCT_SOONG_NAMESPACES=device/google/sunfish hardware/google/av hardware/google/interfaces hardware/google/pixel hardware/qcom/sm7150 hardware/qcom/sm7150/display vendor/google/camera vendor/qcom/sm7150 vendor/google/interfaces vendor/qcom/sm8150/codeaurora/telephony/ims vendor/qcom/sm8150/proprietary/data/permissions vendor/qcom/sm8150/proprietary/qcril-data-hal/qdp vendor/qcom/sm8150/proprietary/qcril-data-hal/util vendor/qcom/sm8150/proprietary/qcril-data-hal/datamodule vendor/qcom/sm8150/proprietary/qcril-hal ============================================ wildcard(out/target/product/sunfish/clean_steps.mk) was changed, regenerating... FAILED: ninja: 'out/host/darwin-x86/bin/brillo_update_payload', needed by 'out/target/product/sunfish/aosp_sunfish-ota-eng.kohleradmin.zip', missing and no known rule to make it 16:09:01 ninja failed with: exit status 1 #### failed to build some targets (01:39 (mm:ss)) ####
问题原因
报错核心是缺少brillo_update_payload工具,这是因为AOSP旧版本(如Android 10)对M1架构的darwin平台支持不完善,默认配置下otatools相关依赖的构建规则未完全启用,导致工具无法生成。
解决步骤
完善otatools构建配置
除修改build/make/core/Makefile外,还需调整build/make/core/main.mk中的配置,确保darwin平台下开启otatools构建:ifneq ($(BUILD_OS),darwin) BUILD_OTATOOLS := true else BUILD_OTATOOLS := true # 将此处修改为true endif单独预构建otatools
全量构建完成后,先单独执行otatools的构建命令,确保依赖工具生成:make otatools等待构建完成后,再执行
make otapackage。启用Rosetta 2兼容模式
M1为arm64架构,当前构建的host工具为x86_64,存在架构不匹配问题。右键终端选择「获取信息」,勾选「使用Rosetta打开」,重启终端后重新执行全量构建+OTA包构建流程。升级AOSP版本
Android 10对M1 Mac的兼容性较差,建议切换到Android 12及以上版本,官方后续版本针对darwin/arm64架构做了大量适配,能大幅减少此类工具缺失问题。
M1 Mac是否支持构建AOSP OTA包?
M1 Mac可以构建AOSP OTA包,但需要满足以下条件:
- 需通过Rosetta 2兼容模式运行,或使用Android 12及以上适配arm64的AOSP版本
- 需手动调整otatools相关构建配置,确保依赖工具编译规则生效
- 旧版本AOSP(如Android 10)会存在较多兼容性坑,不推荐使用
内容的提问来源于stack exchange,提问作者Jayson_jia

