You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用内更新显示成功但未实际更新的问题咨询

Android应用内更新(In App Update)测试问题

我正在测试Android In App Update功能,尝试使用签名生产发布APK以及版本低于Google Play商店可用版本的调试生产APK。每次应用内更新弹窗都会显示并提示完成成功,但应用版本并未从Play商店完成更新。

以下是我使用的代码:

fun checkInAppUpdate() {
    val appUpdateManager = AppUpdateManagerFactory.create(this@FoundationActivity)

    val appUpdateInfoTask = appUpdateManager.appUpdateInfo

    appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
            appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, this@FoundationActivity, APP_UPDATE_REQUEST_CODE)
        }
    }
    appUpdateInfoTask.addOnCompleteListener {
        Timber.e("In App update complete ${it.isSuccessful} - ${it.result}")
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == APP_UPDATE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) Timber.e("In App Update Worked OK")
        else Timber.e("In App Update failed with $resultCode")
    }
}

我总能看到日志条目"In App Update Worked OK"和"In App update complete true - com.google.android.play.core.appupdate.AppUpdateInfo@f0b5242",但应用并未更新。请问是否无法通过这种方式测试In App Update API?是否只能发布到Google Play商店才能测试该功能?


核心结论

直接用本地安装的签名APK/调试APK无法触发真实的Play商店应用内更新流程,必须通过Google Play的官方测试渠道验证该功能。

具体原因

  • Play商店校验逻辑限制:In App Update API完全依赖Google Play服务的校验体系,只有从Play商店(含各类测试渠道)下载安装的APK,才会被Play服务识别为可管理的应用,进而触发真实的更新下载与安装。本地安装的APK即使包名、签名正确,也不在Play商店的应用管理链路中,无法启动后续更新步骤。
  • 日志的误导性:你看到的RESULT_OK仅代表更新弹窗的UI交互流程完成(比如用户点击了更新按钮),并不意味着Play服务真正启动了更新任务。因为本地APK未关联Play商店的应用条目,后续的下载、安装环节根本不会执行。

正确测试方式

  • 使用Google Play测试渠道:将测试版本上传到Google Play的内部测试/封闭测试渠道,邀请测试账号加入后,用这些账号从Play商店下载旧版本APK,即可触发真实的应用内更新流程。
  • 开启Play App Signing:确保应用开启Play App Signing功能,保证本地签名APK与Play商店分发的APK签名一致,避免因签名不匹配导致更新失败。
  • 补充更新状态监听:除onActivityResult外,建议添加AppUpdateManager的状态监听,更准确判断更新进度,示例代码如下:
appUpdateManager.registerListener { state ->
    when (state.installStatus()) {
        InstallStatus.DOWNLOADED -> {
            // 提示用户重启应用完成更新
            showUpdateCompletePrompt()
        }
        InstallStatus.INSTALLED -> {
            // 更新完成,可移除监听
            appUpdateManager.unregisterListener(this)
        }
    }
}

内容的提问来源于stack exchange,提问作者Hector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:24:21