无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:手动提供配置资源并指定资源根目录
- 在项目中新建自定义配置目录,比如
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>
- 在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ţ
相关产品推荐
相关产品推荐

