使用Play核心库验证是否安装了非Google Play应用

Nav*_*T P 9 crash android sideloading android-app-bundle google-play-core

一些背景信息:ResourceNotFoundException当我们迁移到Android应用程序捆绑包发布方法时,我们大多数人都可能遇到过。显然,问题出在侧面加载应用程序。参考这里。

Google最近宣布了针对此问题的解决方案。使用播放核心库,我们可以确定该应用是否为侧面加载(标识丢失的拆分apk)。如果应用程序是侧面加载的,则会显示“ 安装失败 ”弹出窗口,并重定向到Play商店,用户可以在其中通过Google Play商店正确安装该应用程序。

问题:一切正常,直到从Play商店安装缺少的拆分APK。现在,当我重新启动该应用程序时,它立即崩溃并显示错误消息。

默认FirebaseApp未在此过程中初始化

注意:直接从Play商店下载应用程序可以正常运行,而不会导致崩溃。仅当由于侧面加载问题而重新下载应用程序时,才会发生崩溃。

代码:
项目的build.gradle

buildscript {
 dependencies {
  classpath 'com.android.tools.build:bundletool:0.9.0'
 }
}
Run Code Online (Sandbox Code Playgroud)

应用模块的build.gradle

 implementation 'com.google.android.play:core:1.6.1'
Run Code Online (Sandbox Code Playgroud)

扩展应用程序的类:

 public void onCreate() {
    if (MissingSplitsManagerFactory.create(this).disableAppIfMissingRequiredSplits()) {
        // Skip app initialization.
        return;
    }
    super.onCreate();
    .....
 }
Run Code Online (Sandbox Code Playgroud)

任何帮助都将非常棒。

Nav*_*T P 2

我已经使用最新版本的 Play 核心库解决了这个问题:

应用程序模块的build.gradle:

implementation "com.google.android.play:core:1.7.2"
Run Code Online (Sandbox Code Playgroud)

其他实现保持不变。

扩展 Application 的类:

public void onCreate() {
 if (MissingSplitsManagerFactory.create(this).disableAppIfMissingRequiredSplits()) {
    // Skip app initialization.
    return;
 }
 super.onCreate();
 .....
}
Run Code Online (Sandbox Code Playgroud)

如何测试:

  • 正确测试它的更好方法是在 Play 商店内部测试通道中发布包含上述修复的应用程序包(将您自己添加为测试人员)。

  • 模拟安装无效的 apk - 使用bundletool 从.apks捆绑包中获取文件,将其解压并使用 adb 命令安装 base_master.apk adb install base_master.apk

  • 启动应用程序,您应该看到“安装失败”对话框,它会重定向到 Play 商店,单击“更新”,Play 商店将安装缺少的 apk。

  • 现在启动应用程序应该可以正常工作。

希望这可以帮助