Android启用Minify+R8构建alpha包时Crashlytics上传任务报错
问题描述
常规构建场景下应用运行正常,配置启用minify与R8代码混淆压缩、构建alpha版本时抛出构建错误,具体报错信息如下:
* What went wrong: Execution failed for task ':app:uploadCrashlyticsMappingFileAlpha'. > Failed to calculate the value of task ':app:uploadCrashlyticsMappingFileAlpha' property 'googleServicesResourceRoot'. > Could not get unknown property 'intermediateDir' for task ':app:processAlphaGoogleServices' of type com.google.gms.googleservices.GoogleServicesTask.
当前debug构建可正常运行,仅开启了混淆与资源压缩的alpha版本会触发上述错误。
异常堆栈
核心异常信息如下(已省略冗余报错行):
* Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:uploadCrashlyticsMappingFileAlpha'. //..... More Error Line
关联构建配置
出现问题时使用的buildTypes配置如下:
buildTypes { getByName("debug") { applicationIdSuffix = ".sandbox" debuggable true } alpha { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' versionNameSuffix ".alpha" } }
根因分析
报错本质是Gradle插件版本不兼容导致的:
- debug构建默认未开启混淆,不会触发Crashlytics的混淆mapping文件上传任务,因此不会触发属性读取逻辑,构建可以正常通过
- 开启混淆的alpha构建变体,会自动触发
uploadCrashlyticsMappingFileAlpha任务,该任务需要读取Google Services任务的输出路径;低版本Crashlytics Gradle插件引用了高版本Google Services插件中已经被移除的intermediateDir属性,最终抛出属性不存在的错误。
解决方案
- 对齐项目根目录下的Google Services插件与Firebase Crashlytics插件版本,使用官方验证过兼容的稳定版组合:将
com.google.gms:google-services升级到4.3.15及以上稳定版本,com.google.firebase:firebase-crashlytics-gradle升级到2.9.9及以上稳定版本,避免跨大版本混用插件。 - 如果需要临时验证问题,可以在alpha构建类型中添加配置临时关闭mapping文件上传:
firebaseCrashlytics { mappingFileUploadEnabled false },注意正式发布构建必须重新打开该开关,否则线上崩溃堆栈无法正常反混淆。 - 如果项目中有自定义Gradle逻辑手动引用了
process<构建变体名>GoogleServices任务的intermediateDir属性,需要将属性名替换为新版本插件对应的outputDir。
内容的提问来源于stack exchange,提问作者Dr. Sa.M.
相关产品推荐
相关产品推荐

