上传 AAB 时代码验证错误:"Files added after transparency metadata generation"



我们在上传下一版本的应用程序时遇到问题。我们使用捆绑包的代码透明度,当我们试图上传到谷歌商店时,它会返回一个错误:

在上传的应用程序捆绑包上运行bundletool构建apk时出错。请在本地运行bundletool build apk,确保您的应用程序捆绑包有效,然后重试。了解更多信息。错误:验证失败,因为代码是在生成透明元数据后修改的。透明元数据生成后删除的文件:[]透明元数据生成之后添加的文件:[/com/android/tools/build/bundletool/archive/dex/1_8_2/classes.dex]透明元数据生成以后修改的文件:[]

它正常地使用了以前的(也是第一个(版本。起初我认为这是由于混淆,请参阅文档:

已知限制使用防篡改保护或任何其他服务的应用程序在生成代码透明文件后进行代码更改,将导致代码透明验证失败

所以我试着把它关掉,但无济于事。我尝试在本地生成APKS,这没有问题,而且本地代码的透明度验证也很好。不幸的是,我在任何地方都找不到任何关于这个问题的提及。

TL;DR:您可以:将生成应用程序捆绑包的bundletool升级到1.13.1,或者(因为在我的情况下无法升级(按照以下步骤禁用应用程序项目中的storeArchive功能,然后重新生成.aab文件

我也有同样的问题。这是bundletool 1.13.1版本的问题,而不是应用程序捆绑包(.aab(或其代码透明文件的问题。Google Play控制台最近一定更新到了1.13.1,这就是它失败的原因。

我浏览了源代码,下面是发生这种情况的原因:

  1. 应用程序的.aab和代码透明度文件正确匹配。.aab在1_8_2/classes.dex处没有文件,因此代码透明性文件表示在1_8_2/classes.dex处没有文件。代码透明度文件列表为空
  2. 当bundletool 1.13.1验证代码透明性文件时,它会在bundle中创建一个文件列表,然后人为地将1_8_2/classes.dex添加到此列表中。1.11.0版本中没有出现这种情况
  3. bundletool将在步骤2中创建的bundle文件的列表与步骤1中的代码透明性文件进行比较。代码透明文件是空的,例如它没有1_8_2/classes.dex的记录。然而,步骤2中的列表包含了这个文件,这只是因为该工具添加了它。因此,它会弹出错误消息,说有人在生成透明文件后将该文件添加到了您的捆绑包中

根据源代码,您可以通过禁用storeArchive功能来阻止步骤2的发生。有多种方法可以做到这一点,但我只是简单地添加了res/xml/com_android_vending_archive_opt_out.xml到我的应用程序:

<?xml version="1.0" encoding="utf-8"?>
<optOut />

然后我重新生成了我的应用程序包,并能够成功上传到Google Play控制台。

相关内容

最新更新