You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M2编译Android10(aosp_arm64-eng)VNDK检查失败求助

解决Mac M2编译Android 10时VNDK库列表检查的diff报错问题

问题根因

Android 10的VNDK库列表检查脚本依赖GNU diff的--old-line-format等专属参数,但Mac M2默认预装的是基于FreeBSD的Apple diff,不支持这些参数。即使build/make/target/product/gsi/29.txt和out/target/product/generic_arm64/obj/PACKAGING/vndk_intermediates/libs.txt内容完全一致,diff命令执行失败也会触发"VNDK library list has been changed"的错误。

解决方案

方法1:安装GNU diff并让编译环境优先使用

  1. 用Homebrew安装GNU diffutils(包含GNU diff):
    brew install diffutils
    
    Homebrew安装的GNU工具会带有g前缀,即gdiff。
  2. 临时在编译会话中替换diff命令:
    在执行source build/envsetup.sh前,执行:
    alias diff=gdiff
    
    之后再正常执行lunch aosp_arm64-eng和make即可。
  3. (可选)永久配置别名:
    打开你的shell配置文件(如~/.zshrc或~/.bash_profile),添加:
    alias diff=gdiff
    
    执行source ~/.zshrc使配置生效,之后所有终端会话都会优先使用GNU diff。

方法2:修改VNDK检查脚本为兼容写法

找到触发检查的编译规则文件(通常是build/make/target/product/gsi/Android.mk),将原来依赖GNU diff的检查逻辑替换为跨平台的文件一致性检查:
将原命令中的:

diff --old-line-format="Removed %L" --new-line-format="Added %L" --unchanged-line-format="" file1 file2 || (...)

替换为:

cmp -s build/make/target/product/gsi/29.txt out/target/product/generic_arm64/obj/PACKAGING/vndk_intermediates/libs.txt || ( echo -e " error: VNDK library list has been changed.\n" "       Changing the VNDK library list is not allowed in API locked branches."; exit 1 )

cmp -s仅检查文件是否完全一致,不输出任何内容,返回状态码0表示一致,非0表示不一致,完全兼容FreeBSD和GNU环境。

方法3:临时跳过VNDK检查(不推荐)

如果确认VNDK库列表未变更,可临时跳过检查:
执行make时添加参数:

make VNDK_CHECK_LIST=false

此方法会关闭VNDK列表变更保护,可能引入潜在问题,仅建议应急使用。

验证

执行上述任一方案后,重新启动编译流程,该VNDK检查步骤应能正常通过。

内容的提问来源于stack exchange,提问作者soibhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:05:29