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并让编译环境优先使用
- 用Homebrew安装GNU diffutils(包含GNU diff):
Homebrew安装的GNU工具会带有brew install diffutilsg前缀,即gdiff。 - 临时在编译会话中替换diff命令:
在执行source build/envsetup.sh前,执行:
之后再正常执行alias diff=gdifflunch aosp_arm64-eng和make即可。 - (可选)永久配置别名:
打开你的shell配置文件(如~/.zshrc或~/.bash_profile),添加:
执行alias diff=gdiffsource ~/.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
相关产品推荐
相关产品推荐

