如何在Android中测试应用内更新?

时间:2019-05-11 04:00:25

标签: android google-play

最近,Google在Google I / O 2019中引入了“应用内更新”。

所以我正在尝试使用它。

val appUpdateManager = AppUpdateManagerFactory.create(this)
val appUpdateInfo = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnCompleteListener {
    val result = it.result
    if (result.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && result.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {

        info("should show update")
        appUpdateManager.startUpdateFlowForResult(
                        result,
                        AppUpdateType.FLEXIBLE,
                        this,
                        1)
    } else {
        info("This is already latest version: ${result.updateAvailability()}")
    }
}

但是“ result.updateAvailability()”始终为“ UpdateAvailability.UPDATE_NOT_AVAILABLE”。

为此,我制作了一个带有先前版本代码的签名发行版APK。 但这不起作用......

根据Developer Keynote (16:40 ~ )上的演示

他正在用模拟器来做。 看起来像调试模式。

我该怎么做?

10 个答案:

答案 0 :(得分:5)

对于我来说,我已经完成了以下步骤:

  1. 从设备上卸载原始应用。
  2. 从Google Play商店安装该应用(我已经在商店中安装了该应用,但是如果您没有该应用,则可以创建Alpha或Beta 版本,而不在商店中发布。
  3. 再次取消安装该应用程序。
  4. 使用新功能生成签名的APK,其versionCode低于Google Play版本
  5. 安装此APK。

启动时,它会在Google Play商店中检查新版本,并显示助手进行更新。 如果此解决方案只能在某台设备上使用,而不能在另一台设备上使用,请尝试使用相同的Google帐户登录,然后在该设备上再次尝试5个步骤。然后,您可以再次使用原始帐户。出于某种疯狂的原因,Google Play似乎“激活”了版本控制,并返回了在其他设备上再次可用的版本。

我不知道具体的行为...

答案 1 :(得分:4)

这为时已晚,但它可能会帮助其他开发者。

截至今天,无法对调试版本进行应用内更新测试。您也不需要将您的 apk 放到 PlayStore 进行测试。测试 in-app-update 的最佳方法是使用 internal-app-sharing

如果您一一按照以下步骤进行操作,您将能够成功测试。

  1. 要测试应用程序,测试人员必须先在 PlayStore 中启用内部应用程序共享,请点击此链接,How to Enable Internal App Sharing for Android?
  2. 如果您有足够的勇气了解官方文档,只需点击此链接即可在您的设备中设置 in-app-update 测试,https://developer.android.com/guide/playcore/in-app-updates#internal-app-sharing

在这里,我会用简单的词来写同样的内容。

internal-app-sharing 中完成 Play-Store 设置后,请确保您必须在 Play-Console 上将 2 个 apk 上传到内部应用共享,从而生成 2 个链接。两个 apk 都将使用相同的 signing-key 进行签名(不必与您用于为生产签名的相同,任何虚拟签名密钥都可以使用)。

  1. 首先,您将带有应用内更新实现且版本代码较低(例如 100)的 apk 上传到播放控制台上的内部应用共享。

要知道如何将 apk 上传到 Play-Console 上的内部应用共享,请按照此 lisk,https://support.google.com/googleplay/android-developer/answer/9844679?visit_id=637437125318137239-1277036129&rd=1

注意:确保您已经卸载了设备中所有具有相同软件包名称的预装应用。

  1. 现在,您将上传的应用链接复制到 Play 控制台上的 internal-app-sharing,并使用此链接在您的设备上安装该应用。

注意:安装前,请确保您在 play-store 上使用的电子邮件 ID 已添加到 play-console 上 internal-app-sharing 的邮件列表中。

  1. 现在,一旦您使用链接安装了应用程序。现在,您需要再次创建一个具有更高版本代码(例如 101)的新签名 apk。并将这个apk上传到internal-app-sharing。

  2. 现在,从 internal-app-sharing 复制具有更高版本代码的链接。在您的设备上单击此链接,它将带您进入游戏商店,但这次将启用 update 按钮而不是 install 按钮,因为您的设备中已经安装了具有较低版本代码的应用程序。< /p>

  3. 您不必点击 PlayStore 上的更新按钮。您只需单击该链接,即可在 PlayStore 上打开屏幕。现在关闭 PlayStore 应用。

  4. 现在,您可以从您的设备启动已安装的应用。

如果您对应用内更新的实现没有问题,启动应用时会出现 PlayStore 中的更新对话框。

<块引用>

最后,如果它对您有任何帮助,请不要忘记点赞。保持 编码!

答案 2 :(得分:3)

看看FakeAppUpdateManager

的文档

或尝试以下预定义方法将帮助您测试应用程序更新是否可用。

FakeAppUpdateManager fakeAppUpdateManager = new FakeAppUpdateManager(this);
        fakeAppUpdateManager.setUpdateAvailable(1); // add app version code greater than current version.
        fakeAppUpdateManager.getAppUpdateInfo().addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
            @Override
            public void onSuccess(AppUpdateInfo appUpdateInfo) {
                if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                        && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                    System.out.println("checkForAppUpdateAvailability");
                }
            }
        });

答案 3 :(得分:2)

嗯... 我找到了解决方案。 它与Google I / O 2019上的演示-开发人员主题演讲不同。

我将签名的发行版APK发布到内部开发人员版本中。 而且效果很好。

或者您可以将其发布在“ Alpha / Beta关闭测试发布”上。

答案 4 :(得分:2)

测试应用内更新的正确方法是使用内部应用共享(不要与内部测试跟踪相混淆)。

  1. 首先在these instructions的帮助下设置您的内部应用共享。与内部测试跟踪不同,内部应用共享使应用立即可用。因此没有等待时间。
  2. 选择通过Google Play进行应用签名。这将允许Google Play对您提供的应用包中为设备生成的APK进行签名。详细信息here
  3. 构建您的应用程序捆绑包。通过命令行,它就是./gradlew bundleRelease./gradlew bundle<variant>
  4. 转到https://play.google.com/apps/publish/internalappsharing/并上传生成的aab文件,该文件位于app/build/outputs/bundle/<variant>/下。给一个体面的名字,其中包括版本代码。
  5. 这将提供复制链接。使用它将此捆绑包安装到您的设备上。
  6. 在您的应用build.gradle中添加版本代码并构建另一个捆绑。
  7. 类似地将此新捆绑包上传到Internal App Sharing。用版本代码命名。
  8. 这将提供另一个链接。打开链接,这将打开Goog​​le Play,您应该看到“更新”选项。 不要单击更新!
  9. 打开您的应用程序,现在您应该会看到应用程序内更新提示。

如果您没有看到提示符 ,并且您没有完全按照以下步骤操作,则很可能是代码有问题。添加一些日志记录以查看代码中发生了什么。

在我们的测试中,以下内容无助于测试应用内更新(在其他地方建议):

  • 在不增加版本代码的情况下重新上传相同的分发包/ apk
  • 将版本代码降低为低于发布的版本

答案 5 :(得分:0)

我不知道这次您是否已经掌握了它,但是经过一段时间的测试,我发现降低versionName是我需要做的,以便能够正确测试它测试仅减少versionCode ... 我认为只要versionNameversionCode过时,API都应该能够处理,但显然不是。

答案 6 :(得分:0)

在测试应用内更新时,Google Play控制台中的内部测试跟踪是一个出色的工具。

答案 7 :(得分:0)

或者,您可以将此类用作UNIT测试来模拟应用内更新

  

FakeAppUpdateManager

这有一些预定义的方法。

答案 8 :(得分:0)

对我来说,docs中“疑难解答”部分的最后一步使它起作用了!

基本上,在更改应用程序的版本(版本名称和代码)后,请执行以下操作:

  

确保该帐户符合条件,并且Google Play缓存最多   日期。为此,在登录Google Play商店帐户后,   测试设备,请执行以下操作:
  确保完全关闭   Google Play商店应用。
  打开Goog​​le Play商店应用,然后转到   我的应用和游戏标签。
  如果您正在测试的应用没有出现   可用的更新,请检查您是否已正确设置测试   轨道。

答案 9 :(得分:0)

  1. 生成一个较低版本的烧录应用程序包,然后将其从 Play 控制台上传到内部应用共享。
  2. 使用生成的链接在您的设备上安装该应用。
  3. 再次生成一个应用包,其版本代码和版本号高于之前的版本
  4. 上传到内部应用分享
  5. 打开新生成的链接,但不要从 Play 商店更新应用。
  6. 再次打开旧应用。
  7. 现在,您将可以看到旧版应用中的更新弹出窗口。

注意 - 安装有内部应用共享的应用无法更新为实时应用,即使版本更高。

为了简单起见,我使用此应用内更新 library