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

Android集成Google Sheets API报错:Application Default Credentials不可用

问题原因

GoogleCredentials.getApplicationDefault() 是为服务器端或本地开发场景设计的,它会优先读取环境变量 GOOGLE_APPLICATION_CREDENTIALS 指定的路径,或者查找系统默认位置的凭证文件。但Android应用没有这种环境变量机制,也无法访问ADC预期的默认路径,所以会抛出「Application Default Credentials are not available」错误。你放在src\main\resources的json凭证文件,ADC根本找不到。

解决方案

1. 调整凭证文件位置

把下载的服务账号json文件移动到Android项目的src/main/res/raw目录(如果没有raw目录就新建一个),建议把文件名改成小写且无特殊字符,比如credentials.json。

2. 修改凭证加载代码

替换setRow方法里的凭证获取逻辑,手动从raw资源加载凭证:

private fun setRow(spreadSheetID: String, range: String, values: ValueRange) {
    try {
        // 从raw资源加载凭证文件
        val inputStream = resources.openRawResource(R.raw.credentials)
        val credentials = GoogleCredentials.fromStream(inputStream)
            .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS))

        val requestInitializer: HttpRequestInitializer = HttpCredentialsAdapter(credentials)

        val service: Sheets = Sheets.Builder(NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer)
            .setApplicationName("FRCScout22")
            .build()

        service.spreadsheets().values().update(spreadSheetID, range, values)
            .setValueInputOption("USER_ENTERED")
            .execute();
    } catch (e: Exception) {
        e.printStackTrace()
        // 这里可以添加错误提示,比如Toast告知用户写入失败
    }
}

3. 必要权限配置

确保AndroidManifest.xml中添加了网络权限:

<uses-permission android:name="android.permission.INTERNET" />

4. 服务账号权限配置

别忘了把服务账号的邮箱(在json文件里的client_email字段)添加到目标Google Sheets的共享列表中,赋予编辑权限,否则会出现权限不足的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:16:07