上传AAB时遇代码验证错误:‘代码透明元数据生成后添加文件’
App Bundle代码透明验证失败:元数据生成后添加bundletool相关DEX文件
问题详情
上传启用**代码透明(Code Transparency)**的App Bundle新版本至Google Play时,触发以下错误:
在您上传的App Bundle上运行bundletool build-apks时发生错误。请通过本地运行bundletool build-apks确保您的App Bundle有效,然后重试。了解更多。错误:验证失败,原因是代码透明元数据生成后代码被修改。元数据生成后删除的文件:[] 元数据生成后添加的文件:[/com/android/tools/build/bundletool/archive/dex/1_8_2/classes.dex] 元数据生成后修改的文件:[]
首个版本上传正常,最初怀疑是ProGuard/R8混淆导致,参考官方文档中“代码透明文件生成后修改代码的服务会导致验证失败”的提示,关闭混淆后问题仍存在,本地执行bundletool build-apks及代码透明验证均无异常。
排查与解决方案
1. 排查构建后注入的工具/插件
错误中新增的是bundletool相关的DEX文件,大概率是构建流程中有工具在代码透明元数据生成后,向Bundle中额外注入了内容:
- 检查CI/CD流水线的构建后步骤(比如自动签名工具、第三方代码加固/注入插件),确保这些操作在代码透明元数据生成前完成。
- 核对项目依赖的Android插件,移除非官方或可能修改Bundle内容的插件。
2. 对齐本地与CI/CD的构建环境
本地验证正常但上传失败,往往是环境不一致导致:
- 确保CI/CD使用的AGP版本、bundletool版本和本地完全相同。
- 分别导出本地和CI/CD生成的App Bundle,执行
bundletool dump content --bundle=your-app.aab命令对比文件结构,确认CI/CD生成的Bundle是否多了/com/android/tools/build/bundletool/相关目录。
3. 调整代码透明任务的执行顺序
代码透明元数据默认在构建后期生成,若有自定义构建任务,需确保其在元数据生成任务之前运行:
- 在模块的
build.gradle中添加任务依赖配置,示例:
替换tasks.named("generateCodeTransparencyMetadataForRelease") { mustRunAfter("your-custom-post-build-task") }your-custom-post-build-task为实际的构建后任务名称。
4. 检查bundletool的使用参数
确保上传时使用的是标准bundletool命令,没有添加调试或额外注入类的参数,避免生成包含额外文件的Bundle。
内容的提问来源于stack exchange,提问作者Petr Daňa
相关产品推荐
相关产品推荐

