You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Google Drive授权仅Android Studio直连构建版本可用问题求助

排查Google Drive OAuth 2.0授权仅Android Studio直连版本可用的问题

从你描述的排查经历来看,这个问题确实绕了不少弯路——既然已经排除了最基础的签名SHA-1错误,我们可以从以下几个更隐蔽的方向深挖:

1. Google Play应用签名的SHA-1是否真的正确关联OAuth凭证?

虽然你提到三者一致,但这里有个极易踩的坑:如果使用Google托管应用签名,只有「应用签名证书」的SHA-1才是OAuth凭证需要的核心值,而非你本地的上传密钥或发布密钥。建议再去Google Play控制台的「应用签名」页面,复制那里显示的「应用签名证书」SHA-1,然后到Google APIs凭证控制台,检查对应Android客户端凭证的SHA-1是否完全匹配。很多时候会不小心把上传密钥的SHA-1填进去,导致Play发布版本无法匹配凭证。

2. 混淆(ProGuard/R8)破坏了OAuth或Google Drive核心代码

你提到Logcat只有混淆后的W.System.err日志,这大概率是混淆工具把Google授权或Drive SDK的关键类、方法给混淆了,导致运行时出现未预期的错误。你需要在ProGuard规则里添加以下保留规则:

# 保留Google Auth相关核心类
-keep class com.google.android.gms.auth.** { *; }
-keep class com.google.android.gms.common.** { *; }
# 保留Google Drive SDK相关类
-keep class com.google.api.services.drive.** { *; }
-keep class com.google.api.client.** { *; }
# 保留注解与反射所需属性
-keepattributes *Annotation*, Signature

另外,建议用build输出的mapping.txt文件反混淆错误日志,找到具体的崩溃点,这样能更精准定位问题。

3. google-services.json的环境配置不一致

Android Studio调试时会自动加载debug环境的配置,而发布版本需要对应release环境的配置。检查你的google-services.json文件,确认里面的client节点是否包含了对应发布签名(或Play应用签名)SHA-1的oauth_client配置,并且release build的client_id是否指向正确的OAuth凭证。有时候debug和release共用了同一个client_id,但这个凭证只关联了debug的SHA-1,导致发布版本无法通过验证。

4. Google服务之间的同步延迟

修改OAuth凭证或应用签名配置后,Google的APIs控制台、Play、Auth服务之间可能存在同步延迟,最长可能需要几个小时才能生效。如果你刚更新凭证就发布了Play版本,很可能遇到这个问题。建议尝试重新创建一个全新的Android客户端凭证,填入正确的包名和Play应用签名SHA-1,更新google-services.json后重新打包发布,然后等待1-2小时再测试。

5. 手动测试发布签名APK,排除Play环境干扰

你可以尝试用发布签名生成一个APK,手动安装到设备上(不要通过Google Play),测试授权是否正常:

  • 如果手动安装的发布APK能正常授权,说明问题出在Google Play的配置或服务同步上,可以尝试联系Google Play开发者支持,或者等待更长时间同步;
  • 如果手动安装的发布APK也无法授权,说明问题出在本地的发布构建配置上,比如签名配置错误、混淆规则问题,或者google-services.json配置错误。

6. Android Studio调试模式的特殊绕过机制

虽然可能性较低,但调试版本可能因为Android Studio的调试模式获得了某些特殊权限,或者Google Play Protect对调试版本的检测更宽松。你可以尝试在build.gradle里把debuggable设为false,用发布签名打包APK,手动安装测试,看看是否能正常授权。


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

火山引擎 最新活动