Android Kotlin上传Google Drive失败:java.lang.IllegalArgumentException: key error
问题分析与解决方案
可能原因1:ProGuard/R8混淆破坏Google Drive SDK类
Release版本默认开启代码混淆,而Google Drive客户端类依赖反射或特定字段、方法实现功能,混淆会破坏这些逻辑,最终抛出密钥相关异常。
解决方法
在项目的proguard-rules.pro文件中添加Google Drive SDK的混淆保留规则:
# 保留Google Drive及相关API类不被混淆 -keep class com.google.api.services.drive.** { *; } -keep class com.google.api.client.** { *; } -keep class com.google.auth.** { *; } -keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
若使用R8压缩工具,需确保上述规则被正确加载,同时检查build.gradle的release构建块中混淆配置是否正常启用。
可能原因2:Release版本SHA1未配置到Google Cloud Console
Debug和Release版本通常使用不同的签名密钥,即便你已配置Debug的SHA1,也可能遗漏了Release版本的密钥信息,导致OAuth身份验证失败。
解决方法
- 获取Release版本的SHA1值:
- 通过Android Studio:打开
Build > Generate Signed Bundle/APK,选择已有的Release密钥库,在弹窗中查看SHA1值。 - 通过命令行:
keytool -list -v -keystore 你的Release密钥库路径 -alias 密钥别名
- 通过Android Studio:打开
- 登录Google Cloud Console,找到对应OAuth 2.0客户端ID,添加该Release的SHA1值并保存,等待1-5分钟让配置生效。
可能原因3:google-services.json配置不匹配Release变体
若项目使用多构建变体,google-services.json可能仅包含Debug版本的客户端信息,导致Release版本无法正确读取OAuth配置。
解决方法
- 从Google Cloud Console下载包含Release SHA1信息的最新
google-services.json文件。 - 将文件放置在
app/src/release目录下(无此目录则创建),确保Release构建变体使用对应配置。
额外排查步骤
- 检查Release构建的
build.gradle配置,确认未禁用Google Drive所需权限(如INTERNET、GET_ACCOUNTS等)。 - 执行
Build > Clean Project后再Build > Rebuild Project,清理构建缓存避免配置冲突。
内容的提问来源于stack exchange,提问作者memical
相关产品推荐
相关产品推荐

