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

无google-play-services插件时如何解决Crashlytics的googleServicesResourceRoot报错

googleServicesResourceRoot参数说明

该参数是Firebase Crashlytics Gradle插件用于读取Firebase项目配置的Android资源根目录,默认由google-play-services插件解析google-services.json后自动生成的构建中间资源目录(通常为build/generated/res/google-services/[风味]/[构建类型]路径),目录下包含解析后的配置XML文件(内含google_app_id、google_api_key等Firebase核心配置字段),并非直接指向google-services.json的存放目录。

不使用google-play-services插件的解决方案

以下方案均不需要引入google-play-services插件、也不需要google-services.json文件,可正常启用混淆映射文件上传能力:

方案1:手动提供配置资源并指定资源根目录

  1. 在项目中新建自定义配置目录,比如src/main/firebase-config,按Android资源规范创建子目录values,新增strings.xml写入你的Firebase项目配置:
<!-- src/main/firebase-config/values/strings.xml -->
<resources>
    <string name="google_app_id" translatable="false">替换为你的Firebase应用ID,格式示例:1:1234567890:android:abc123def456</string>
    <string name="google_api_key" translatable="false">替换为你的Firebase项目API Key</string>
    <string name="project_id" translatable="false">替换为你的Firebase项目ID</string>
    <!-- 其他未使用的Firebase服务对应的配置项可直接删除,不影响Crashlytics功能 -->
</resources>
  1. 在app模块的build.gradle.kts中添加任务配置,手动指定资源根目录:
import com.google.firebase.crashlytics.buildtools.gradle.tasks.UploadMappingFileTask

// 为所有Crashlytics映射上传任务指定配置资源目录
tasks.withType<UploadMappingFileTask> {
    googleServicesResourceRoot.set(layout.projectDirectory.dir("src/main/firebase-config"))
}

// 可选配置:如果有多个构建风味,可按风味动态指定对应配置目录
/*
tasks.withType<UploadMappingFileTask> {
    val flavorName = name.substringAfter("uploadCrashlyticsMappingFile").substringBefore("Release").substringBefore("Debug")
    googleServicesResourceRoot.set(layout.projectDirectory.dir("src/${flavorName.lowercase()}/firebase-config"))
}
*/

方案2:直接配置上传任务参数,无需额外资源文件

如果不想维护额外的配置资源,可直接给上传任务指定核心配置参数,跳过资源读取逻辑:

import com.google.firebase.crashlytics.buildtools.gradle.tasks.UploadMappingFileTask

tasks.withType<UploadMappingFileTask> {
    // 直接配置Firebase核心参数
    appId.set("替换为你的Firebase应用ID")
    apiKey.set("替换为你的Firebase项目API Key")
    projectId.set("替换为你的Firebase项目ID")
    // 给googleServicesResourceRoot设置默认值绕过非空校验
    googleServicesResourceRoot.convention(layout.projectDirectory.dir("src/main"))
}

内容的提问来源于stack exchange,提问作者Andrei Mărcuţ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:03