我有一个包含以下模块的即时应用程序:
我希望installed
同时拥有feature1
和feature2
,而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
应用发布版本。它包含base
和feature1
apks,但当我将其上传到控制台时,我收到错误:
Your Instant App APKs contains an APK name 'feature2' that either does not exist or was not included.
我做错了什么? installed
和instant
个应用可能有不同的功能集,对吗?
答案 0 :(得分: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中。
该错误听起来像是在{@ 1}}中找到了引用,但在Instant App zip中找不到相应的APK文件。
如果是这种情况,那么您应该再次检查feature2
个文件以及每个模块中的build.gradle
,以确保没有AndroidManifest.xml
feature2
的引用instant
public static PathFinder<Path> shortestPath(PathExpander expander,
int maxDepth,
int maxHitCount)
1}}模块可能会接收。
答案 1 :(得分:0)
即使您不想使用它们,即时应用程序应该包含所有功能模块,只是不要将它们与网址链接,它们永远不会被加载。
当调用即时应用程序时,Play商店会下载base + feature1。现在,假设您的feature1通过深层链接链接到feature2,然后播放商店下载功能2。即时应用程序应该包含zip中的所有功能apks。
在构建gradle中添加此项,然后尝试上传。这对我有用。
实施项目(':feature2')