如何识别特定的apk版本,即使用户在Google Play中更新apk

dea*_*ish 8 android uniqueidentifier apk

我需要识别具有特定apk构建的用户.这个版本具有一些与普通apk相比的功能(就像一些函数在开始时是PRO).

build for GooglePlay------>
                           ----> next version of apk
build for some Customers-->
Run Code Online (Sandbox Code Playgroud)

我想将一些数据保存到数据库中,所以即使我更新了apk I,也会有用户数据,无论用户将拥有什么版本.

当用户未运行应用程序但立即更新到下一版本时,会发生此问题.用户没有初始化sqlite,因此没有存储数据.

有没有办法保持数据并重用它,即使用户更新基地apk到更新版本?

Ema*_*l S 3

你不能,至少在没有 root 或任何其他“补丁”解决方案的情况下不能。

有一些解决方案效果不佳,需要一些准备。

解决方案一:

创建第二个应用程序,该应用程序必须预安装并具有PACKAGE_ADDED接收器。Onec 它接收您的应用程序的安装,它将至少运行它。

解决方案2:

创建一个BOOT_COMPLETED接收器,但这意味着设备需要重新启动才能激活。即使使用此解决方案,它也可能有效,也可能无效。自 Android 3.1 以来,谷歌添加了一项安全策略,要求(大多数设备)应用程序至少启动一次才能进入激活状态(某些制造商没有此安全策略)。

解决方案3:(唯一有效的解决方案)

为您的“客户应用程序”创建一个不同的包。Onec 应用程序是从 Playstore 安装并启动的,它将验证是否安装了具有客户命名空间的应用程序。如果是,那么它将开始执行您的 Customers-Sqlite-Stuff 并随后卸载该应用程序。

例子:

com.myapp.customer -> 安装 com.myapp.playstore -> 安装 -> 启动 -> 验证com.myapp.customer是否已安装并激活“客户例程” -> 删除com.myapp.customer

编辑:

使用 Android Gradle Plugin 3+ 允许您创建风格,从而使您可以轻松创建不同的包名称/构建。 https://developer.android.com/studio/build/build-variants.html