生成APK时遇UnknownHostException: firebasecrashlyticssymbols.googleapis.com错误
我之前也碰到过类似的构建报错,结合你的配置和描述,给你几个针对性的排查和解决方向:
1. 优先排查网络访问问题
这个java.net.UnknownHostException: firebasecrashlyticssymbols.googleapis.com报错核心是构建过程中Gradle无法访问Firebase的符号上传域名,这是最常见的原因:
- 先测试网络:直接在浏览器里访问
firebasecrashlyticssymbols.googleapis.com,如果无法打开,说明你的网络(比如公司内网防火墙、家用网络的DNS设置)拦截了这个域名,需要联系网络管理员放行,或者切换到能访问Firebase服务的网络环境。 - 检查Gradle代理配置:如果你的项目用了代理,确认
gradle.properties里的代理设置(http.proxyHost、http.proxyPort等)是否能正常访问外部域名,有些代理会限制Google相关服务的访问。另外,要确保Release构建没有使用和Debug不同的代理配置。
2. 调整Firebase插件的应用顺序
你当前的插件应用顺序可能存在问题,Firebase官方推荐的插件加载顺序是:
// 首先是Android应用插件 apply plugin: 'com.android.application' // 然后是Crashlytics插件 apply plugin: 'com.google.firebase.crashlytics' // 接着是Firebase性能插件 apply plugin: 'com.google.firebase.firebase-perf' // 最后是Google Services插件(处理google-services.json) apply plugin: 'com.google.gms.google-services'
错误的顺序可能导致Crashlytics的构建任务依赖异常,进而触发符号上传时的网络报错。调整顺序后重新执行assembleProdRelease试试。
3. 临时禁用符号上传验证问题根源
因为你启用了minifyEnabled true,Crashlytics会自动将混淆映射文件(mapping.txt)上传到Firebase服务器。可以临时禁用这个上传来验证是否是符号上传流程导致的报错:
在你的release buildType中添加以下配置:
release { // 其他原有配置... firebaseCrashlytics { mappingFileUploadEnabled false } }
如果这样能成功构建APK,就可以确定问题出在符号上传的网络环节,接下来集中解决网络访问该域名的问题即可。
4. 检查插件与Gradle版本兼容性
虽然你提到有版本截图,但版本不兼容也可能触发奇怪的构建问题:
- 确保Firebase相关插件(Crashlytics、Performance)和Android Gradle Plugin(AGP)、Gradle版本是匹配的。比如AGP 7.x对应Gradle 7.x或8.x,Firebase插件尽量使用最新稳定版。
- 可以尝试在项目根目录的
build.gradle里更新Firebase插件版本到最新,比如:
dependencies { classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' classpath 'com.google.firebase:perf-plugin:1.4.2' classpath 'com.google.gms:google-services:4.4.1' }
5. 确认BuildConfig字段的正确性
你提到用了prod和mobile两种flavor,仅添加BuildConfig字段,需要确认在prod flavor的Release构建中,BuildConfig.DEBUG的值确实是false(因为你设置的是!BuildConfig.DEBUG)。虽然这个不会直接导致UnknownHostException,但如果值不符合预期,可能间接影响Crashlytics的初始化逻辑,进而触发构建任务的异常。
内容的提问来源于stack exchange,提问作者ProRiderZ115

