测试恢复凭据

Credential Manager 中的恢复凭据功能可确保用户顺利过渡到新设备。测试该功能时,您可以使用以下任一方法:

  • 单独的设备:使用源设备执行备份,并使用单独的目标设备执行恢复,或使用两个单独的 Android Studio 模拟器。
  • 单台设备:使用一台实体设备或一个 Android Studio 模拟器。 在应用备份其数据后,卸载并重新安装该应用,然后执行恢复。

本指南介绍了如何使用 Android Studio 在模拟器上测试可调试应用的恢复凭据,模拟单独设备或单个设备这两种情况。

前提条件

如需使用 Android Studio 的备份和恢复功能测试“恢复凭证”功能,请验证以下前提条件:

  • Android Studio Otter | 2025.2.1 或更高版本。
  • 搭载 Android 9(API 级别 28)或更高版本的虚拟设备或实体设备,且该设备具有 Google Play 系统映像和 Google Play 服务 242200000 或更高版本(使用 adb shell dumpsys package com.google.android.gms | grep versionCode 进行验证)。
  • 在测试设备或模拟器上登录的 Google 账号,在设置 > 安全下配置了 PIN 码、解锁图案或密码屏锁,以便云端到端加密 (E2EE) 处于活跃状态,并且不会抛出 E2eeUnavailableException。
  • 使用 debuggable true 构建或在 debug 模式下运行的应用。 对于模拟器,调试功能默认处于启用状态。

使用 Android Studio 的备份和恢复功能

如需使用 Android Studio 测试“恢复凭证”功能,请先从一台设备备份数据,然后在另一台设备上恢复应用数据。恢复应用后,身份验证状态会自动恢复。

在 Android Studio 中备份身份验证数据

如需在 Android Studio 中测试备份流程,请完成以下步骤:

  1. 在模拟器上运行您的应用。
  2. 使用任何身份验证机制(例如用户名和密码、通行密钥或“使用 Google 账号登录”)登录应用,以便应用使用 CreateRestoreCredentialRequest 调用 createCredential()。
  3. 在正在运行的设备窗口顶部的设备选项中,点击 Backup App Data。
    在 Android Studio 中备份应用数据
    图 1:在 Android Studio 中备份应用数据
  4. 在备份类型部分,选择设备到设备或云端。

  5. 点击确定。

测试恢复的身份验证

备份完成后,使用同一设备或另一设备测试恢复步骤。

如需在 Android Studio 中测试恢复流程,请完成以下步骤:

  1. 如需使用同一设备进行测试,请卸载并重新安装应用(adb uninstall <package_name>,然后 adb install <path_to_apk>)。这会清除设备上的所有本地应用数据和之前的恢复密钥。如需在新设备上使用该应用,请在新设备上安装该应用。

  2. 如需在不先启动 Activity 的情况下测试第 1 层级后台恢复 (BackupAgent.onRestoreFinished()),请在 Android Studio 中依次打开 Run > Edit Configurations,并在安装前将 Launch Options > Launch 设置为 Nothing。如果您在运行恢复应用数据之前启动应用,系统会将您重定向到身份验证界面,因为恢复密钥尚未恢复到设备。

  3. 在“正在运行的设备”窗口的设备选项中,点击恢复应用数据,然后选择最近创建的备份。

    在 Android Studio 中恢复应用数据
    图 2:在 Android Studio 中恢复应用数据

  4. 检查 Logcat 以确认 BackupAgent.onRestoreFinished() 在后台检索了 RestoreCredential,或打开应用以验证用户是否已自动登录。

使用 adb 或自动化 JUnit 5 测试套件进行测试

除了 Android Studio 的界面操作之外,您还可以通过命令行或在持续集成 (CI) 中测试备份和恢复流程:

  • 使用 bmgr 进行命令行测试:在实体设备或无头模拟器上,启用备份管理器 (adb shell bmgr enable true)、触发备份 (adb shell bmgr backupnow <package_name>)、重新安装应用、列出可用的备份集 (adb shell bmgr list sets),并触发恢复 (adb shell bmgr restore <token> <package_name>)。如需了解完整详情,请参阅测试备份和恢复。
  • 自动化 JUnit 5 主机测试 (androidx.test.backup):使用 BackupRestoreController 编写自动化 JUnit 5 测试,以在一两台已连接的设备上测试 BackupTransportMode.CLOUD_ENCRYPTED 和 BackupTransportMode.DEVICE_TO_DEVICE。如需查看设置说明和示例测试,请参阅自动备份和恢复测试。