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

2024-03-10

一些背景:我们大多数人可能都遇到过这样的情况ResourceNotFoundException当我们迁移到安卓应用程序包释放方法。很明显,问题是由于侧面加载应用程序造成的。参考这里。 https://stackoverflow.com/questions/50471888/android-app-bundle-introduces-resource-not-found-crash-in-android-app

谷歌最近宣布solution https://developer.android.com/guide/app-bundle/sideload-check对于这个问题。使用 play core 库,我们可以识别应用程序是否是侧面加载的(识别丢失的拆分 apk)。如果应用程序是侧面加载的,则会显示“安装失败” 弹出窗口并重定向到 Play 商店,用户可以在其中通过 Google Play 商店正确安装应用程序。

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

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

Note:直接从 Play 商店下载应用程序效果非常好,没有任何崩溃。仅当应用程序由于侧面加载问题而重新下载时才会发生崩溃。

Code:
项目的build.gradle:

buildscript {
 dependencies {
  classpath 'com.android.tools.build:bundletool:0.9.0'
 }
}

应用程序模块的build.gradle:

 implementation 'com.google.android.play:core:1.6.1'

扩展应用程序的类:

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

任何帮助都会非常好。


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

应用程序模块的build.gradle:

implementation "com.google.android.play:core:1.7.2"

其他实现保持不变。

扩展 Application 的类:

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

如何测试:

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

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

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

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

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Play 核心库验证非 Google Play 应用安装 的相关文章

  • Android 覆盖在软件按钮之上

    我正在尝试编写一个绘制自定义鼠标指针的应用程序 我目前有一个服务 它创建一个扩展 ViewGroup 的类 并使用 WindowManager 系统服务将其显示为带有 FLAG LAYOUT IN SCREEN 设置的 TYPE SYSTE
  • Visual Studio 不允许我在 Android 物理设备上进行调试

    我正在使用 Xamarin 和 Visual Studio 2013 开发 Android 应用程序 我已将 Android 小程序连接到计算机 Sansung Kies 识别了该设备 Adb 也能识别它 因为当我输入 adb device
  • Android中如何使用洪水填充算法?

    我是Android编程新手 最近尝试编写一个简单的应用程序 仅供练习 在这个中 我想在用户点击时为图像着色 但我不知道如何开始 我读过不同的主题 其中提到使用 洪水填充 算法 我在网上找到了它 但我不知道如何将它放入我的简单应用程序中 我找
  • 显示警报或收到通知时的视图

    我正在关注this http tokudu com 2010 how to implement push notifications for android 显示的教程通知 on an 安卓设备 当我在设备上运行该应用程序时 状态栏上会出现
  • AppCompat v21 工具栏更改徽标大小

    我正在从以前的操作栏迁移到 appcompat v21 中的新工具栏功能 我仍然想将徽标保留在操作栏 工具栏 的左上角 为此 我在布局中添加了支持工具栏 并为其创建了一个新的工具栏 app theme style NewToolBarSty
  • Android Studio - 错误:未捕获翻译错误:com.android.dx.cf.code.SimException:本地 0001:无效

    我刚刚使用 Android Studio 设置了一台新计算机 并从 bitbucket 导入了我的项目 问题是我现在在尝试构建项目时遇到此错误 信息 Gradle 任务 app clean app generateDebugSources
  • 如何使用 adb 在设备上安装现有的 Android 应用程序?

    在开发过程中 我使用类似的东西 adb s 192 168 1 77 5555 uninstall com myApp app adb s 192 168 1 77 5555 install path to android debug ap
  • Google Firebase - 如何删除崩溃报告?

    我最终失明了吗 还是没有明显的方法可以通过 Google Firebase Web 控制台删除 Firebase 崩溃报告 我的 Android 应用程序已成功记录报告 但现在出现大量 开发崩溃 占用了我在控制台中的大部分视图 这使得找到实
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • Android-工具栏中的SearchView

    我只想在我的应用程序中添加 searchview 但我不想搜索任何东西 只是我想要用户输入的查询 到目前为止 我尝试了这段代码 但是当我运行我的应用程序时它崩溃了 Update 我尝试了这个 但即使我的应用程序崩溃了 main menu x
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • AnalyticsService 未在应用程序清单中注册 - 错误

    我正在尝试使用 sdk 中提供的以下文档向 Android 应用程序实施谷歌分析服务 https developers google com analytics devguides collection android v4 https d
  • 没有调用addToBackStack,片段仍然添加到backstack,为什么?

    我正在制作我的片段更换器助手类 但我遇到了一些问题 我称之为FragmentChanger 它有一个fragmentContainer 这是一个ViewGroup 其中包含我想展示的所有片段 我已经做了我自己的replace Fragmen
  • Android ListView setSelection() 似乎不起作用

    我有一个ListActivity实现onListItemClick 并调用doSomething 类的功能 后者包含l setSelection position where l is the ListView object 现在有一个on
  • 如何从android获取应用程序安装时间

    我尝试了一些方法 但没有成功 请帮助我 PackageManager pm context getPackageManager ApplicationInfo appInfo pm getApplicationInfo app packag
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 如何在Android Compose中使用otf类型字体文件?

    我正在学习使用 Android Jetpack Compose 现在我有一个正则 otf字体文件在资产 字体 我想在文本中使用它 java lang RuntimeException Font asset not found commonu
  • android 中camera.setParameters 失败

    我已将相机功能包含在我的应用程序中 我还在市场上推出了该应用程序 我从一位用户那里收到一条错误消息 称他在打开相机时遇到错误 我已经在 2 1 的设备上测试了该应用程序 我从用户那里得到的错误是使用 Nexus One 它主要运行 2 2
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • ng-show/ng-if 不会立即更新 dom 高度

    我有一个很长的 div 它是由 ng hide 隐藏 显示的 这是一个基于离子的示例demo http codepen io leonz full bEqbKM 单击该按钮可以显示或隐藏 longDiv 如果您尝试在隐藏或显示页面后立即滚动
  • 如何从 pandas groupby 对象创建多个数据框

    我正在尝试在多索引数据帧 df 上使用 groupby 创建新的数据帧 级别 0 是字符串标识符 级别 1 是日期时间索引 最终我想确定每个 vsl 与每个 DIV 和 DIS 关联的总时间 这是 df 的片段 DIV DIS vsl Be
  • 派生类中的 sizeof(*this) 和 decltype(*this)

    假设有类 struct A int a virtual size t GetMemoryUsage const return sizeof this struct B public A int b 而且可能还有更深层次的传承 我想要的是有一
  • 下面的 for 循环语法在 C 中意味着什么?

    我遇到了这个语法 不知道它意味着什么 for do stuff like read from a handle etc 我仍然处于 C 语言的学习曲线上 所以如果你愿意的话 如果这是一个蹩脚的问题 请投票否决 这是一个无限循环 与 一样wh
  • Jersey:禁用默认 JSON 提供程序

    我正在使用 Jersey 2 17 JSON 和自动功能发现 我有我的自定义 JSON Provider 扩展JacksonJsonProvider 它的注释是 Provider并自动注册 与附带的默认注册相同
  • React - 单个组件的动画安装和卸载

    这么简单的事情应该很容易完成 但我却对它的复杂程度感到抓狂 我想做的就是为 React 组件的安装和卸载设置动画 仅此而已 以下是我迄今为止尝试过的方法以及每个解决方案不起作用的原因 ReactCSSTransitionGroup 我根本没
  • 类型“HttpRequestMessage”在未引用的程序集中定义

    当我在本地构建时它可以工作 但我的 VSTS 托管 2017 实例构建失败并显示以下消息 error apps Ascend Identity AccountController cs 126 17 Error CS0012 The typ
  • 将多个图包裹在一个图像中

    我试图将许多图包装在一起 因为它们密切相关 使用 1 个连续变量和 1 个分类变量显示密度 按一周中的某一天细分 其中每一天都是不同的图 在 R 中 我可以使用grid arrange from gridExtra or facet wra
  • 如何在普通的
    中使用 而不是

    我有一个使用标准 HTML 的搜索表单
  • 制定紧凑的隐私政策

    我正在研究使用 cookie 进行跟踪的想法 并注意到我当前的网站没有紧凑的隐私政策 我用谷歌搜索了一下 有很多方法可以创建它们 但要付出一定的代价 只是想知道是否有一种方法可以在不付费的情况下做到这一点 有任何想法吗 我正忙着同样的事情
  • Angular 2+ 中的 Azure Graph / Microsoft Graph 查询

    我想在 Angular 5 Web 应用程序中从 Azure Active Directory 查询应用程序角色和组声明 我想授予管理员对页面的特殊权限 访问权限 我在 Azure 中注册了一个 B2C 应用程序 在以下地址注册了一个 Mi
  • 如何获取redis中的所有集合?

    我知道 KEYS 命令 但它只返回键 我猜测所有类型为 String 的键 并且显然集合不被视为键 有没有获取数据库中所有集合的命令 其他数据类型 散列 列表 排序集 怎么样 http redis io topics data types
  • 如何保持 RTSP 会话存活?

    我尝试在 Google Nexus S 2 3 7 HTC Desire 2 3 3 和 Samsung Galaxy 3 2 上进行流式传输 只有 Google Nexus 存在 RTSP 会话超时问题 我阅读了一些关于这个问题的帖子 似
  • 将 GeoDataFrame 多边形转换为 kml 文件

    我有一个 geopandas GeoDataFrame 其中包含各种多边形和颜色 我用它来绘制气象数据 我问的另一个问题here https stackoverflow com questions 35516318 plot colored
  • JS 代理 HTML5 画布上下文

    我希望代理画布 API 这样我就可以测试抽象方法是否确实绘制到画布上 但是我遇到了代理后出现错误的问题 strokeStyle setter called on an object that does not implement inter
  • 相对于页面滚动背景

    这是我第一次使用 Stack Overflow 所以如果我的问题有点冗长 我深表歉意 我有点为难 我想创建这种视差滚动效果 其中背景图像 其高度大于窗口的高度 始终与页面上的进度直接相关地滚动 例如 当您向下滚动页面 25 时 背景图像应该
  • 如何使用 JavaScript 在 IE 6 7 8 9 中分离事件

    这是部分代码 不是完整版本 我有一个荧光笔 可以在以下情况下突出显示特定的 html 元素 鼠标悬停 我也有一个点击事件和监听器 我的问题是 荧光笔事件 侦听器使用 Internet Explorer v6 v7 v8 v9 时不分离 我究
  • 始终在非视网膜显示屏上使用的图像的视网膜版本

    In Cocoa application I ve got 16x16 and 32x32 2x version of an image When the image is displayed in NSImageView Mac OS X
  • MongoDb:避免过多的磁盘空间

    我有一个已分配85GB空间的数据库 我使用 show dbs 命令获得了这个大小 但是当我使用 db stats 时 我得到的存储大小为 63GB 查看文档后 我发现 dat mongo db 为创建的数据库分配了一个大小 然后填充了实际数
  • 使用 Play 核心库验证非 Google Play 应用安装

    一些背景 我们大多数人可能都遇到过这样的情况ResourceNotFoundException当我们迁移到安卓应用程序包释放方法 很明显 问题是由于侧面加载应用程序造成的 参考这里 https stackoverflow com quest