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

Android模拟器上CredentialsManager实现测试遇异常问题排查

解决CredentialsManager API在Android模拟器上的Google登录异常问题

先拆解你遇到的两个异常,结合代码和模拟器环境分析问题:

1. NoCredentialException 异常原因及解决

你代码里设置了setFilterByAuthorizedAccounts(true),这个参数会只返回已经被你的应用授权过的Google账号凭证。模拟器上虽然登录了Google账号,但这个账号大概率没通过你的应用完成过完整的授权流程,所以过滤后找不到匹配的凭证,抛出该异常。

解决方式:

  • 临时将setFilterByAuthorizedAccounts(true)改为false,测试是否能正常获取到模拟器上登录的Google账号
  • 如果需要保留过滤逻辑,先在模拟器上通过传统的Google登录流程(比如用GoogleSignInClient完成一次登录授权),之后再调用CredentialsManager就能获取到已授权的凭证

2. GetCredentialProviderConfigurationException 异常原因及解决

这个异常通常和模拟器的Google Play服务配置不完整有关:

  • 确认你使用的模拟器镜像类型是Google Play APIs(不是仅标注Google APIs的镜像),纯Google APIs镜像缺少部分Google服务组件,无法支持CredentialsManager的完整功能
  • 打开模拟器内的Google Play商店,检查并更新Google Play服务到最新版本,旧版本可能和你项目依赖的Identity库版本不兼容
  • 检查项目中依赖的Google Identity库版本,建议使用最新稳定版,避免版本不匹配导致的配置异常

代码优化建议

setAutoSelectEnabled(true)的生效前提是存在已授权且符合条件的账号,在测试阶段或未完成授权的环境下,这个设置可能会干扰正常的账号选择流程,建议先关闭该选项,待确认授权流程正常后再开启。

调整后的测试代码示例:

val googleIdOption = GetGoogleIdOption.Builder()
    .setFilterByAuthorizedAccounts(false) // 先关闭过滤,测试基础功能
    .setServerClientId(webClientId)
    // .setAutoSelectEnabled(true) 暂时注释,测试完成后再开启
.build()

综上,你的问题既有代码参数设置的适配问题,也有模拟器环境配置的问题,按上述步骤调整后应该能解决异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:39:55