【问题标题】:Instant App Google Play upload failedInstant App Google Play 上传失败
【发布时间】:2017-11-11 02:57:22
【问题描述】:

我有一个包含以下模块的即时应用程序:

  • 基本功能
  • 功能1
  • 功能2
  • 已安装
  • 即时

我希望installed 同时拥有feature1feature2,而instant 只有feature1

即时build.gradle:

apply plugin: 'com.android.instantapp'

dependencies {
    implementation project(':base')
    implementation project(':feature1')
}

已安装build.gradle:

apply plugin: 'com.android.application'

dependencies {
    implementation project(':base')
    implementation project(':feature1')
    implementation project(':feature2')
}

我想测试上传到 Google Play 开发者控制台,所以我创建了 instant 应用发布版本。它包含basefeature1 apks,但是当我将它上传到控制台时,我得到了错误:

Your Instant App APKs contains an APK name 'feature2' that either does not exist or was not included.

我做错了什么? installedinstant 应用程序可以有不同的功能集,对吧?

【问题讨论】:

  • 实施项目(':feature1') 实施项目(':feature2')。工具中有一个错误会忽略功能名称中的数字,因此这两个功能最终都是“功能”。这可能会导致一些问题。使用特性的专有名称。例如“listing_feature”、“details_feature”
  • @Anirudh 谢谢,但这些名称只是举例。功能在我的项目中有专有名称。

标签: android android-gradle-plugin android-instant-apps


【解决方案1】:

安装应用和免安装应用可以有不同的功能集,对吧?

是的,应该可以。虽然您可以将com.android.library 插件用于feature2,但前提是它仅被您安装的应用用作AAR 文件(实际上,这样做可能有助于揭示问题)。

我做错了什么?

我不确定,但我猜测 feature2 以某种方式被 Instant App APK 文件之一引用。要检查,请在 Studio 3.0 Canary 的 APK Analyzer 中加载 Instant App .zip 文件,然后查看每个 APK 的 AndroidManifest.xml 文件。在您的<activity> 中查找设置如下的属性:android:splitName="feature2"。这告诉一个 APK 另一个功能的代码存在于另一个功能 APK 中。

该错误听起来像是在 Instant App zip 中找到了对 feature2 的引用,但没有找到对应的 APK 文件。

如果是这种情况,那么您应该再次检查您的build.gradle 文件以及每个模块中的AndroidManifest.xml,以确保没有instant 模块可能获取的对feature2 的引用。

【讨论】:

  • 感谢您的回复。确实有来自feature2 的所有活动与split="feature2"base 合并AndroidManifest.xml。但我检查了所有模块,似乎没有引用feature2。您知道为什么将 feature2 活动添加到免安装应用清单吗?
  • 我不确定这是怎么发生的。您可以从针对您的即时应用程序模块的命令行运行详细的gradlew assembleDebug,以查看它如何合并/组合所有模块。您也可以尝试将feature2 切换到com.android.library 插件,这可能会有所帮助。否则听起来这里可能有一个错误。如果您可以重新创建一个可重现的示例项目,那么我将按照以下方式提交一个错误:developer.android.com/studio/report-bugs.html
【解决方案2】:

即时应用程序应该具有所有功能模块,即使您不想使用它们只是不要将它们与 url 链接,它们将永远不会被加载。

当调用免安装应用时,Play 商店会下载 base + feature1。现在,假设您的功能 1 通过深层链接链接到功能 2,然后播放商店下载功能 2。免安装应用应包含 zip 中的所有功能 apk。

将此添加到您的构建 gradle 中,然后尝试上传。这对我有用。

实施项目(':feature2')

【讨论】:

  • 问题是feature2模块很大,我担心apk不会通过4Mb验证,所以我想把它从instant app中排除。我还尝试从 Instant 中排除 feature1 并安装它并且工作正常,因此很明显 Instant 和安装可以有不同的模块集。
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 2020-01-29
相关资源
最近更新 更多