最近在编译SocialCall社交Flutter项目,在编译到最后一步时出现以下错误:

* What went wrong:
Execution failed for task ':app:uploadCrashlyticsMappingFileXXXRelease'.
> org.apache.http.conn.HttpHostConnectException: 
Connect to firebasecrashlyticssymbols.googleapis.com:443 
[firebasecrashlyticssymbols.googleapis.com/172.217.160.74] 
failed: Connection timed out: connect

百度后发现这个是Firebase Crashlytics集成引起的错误。当你集成Firebase Crashlytics完毕后,debug模式下的编译运行完全正常,然而但你要打release包的时候此时会出现错误,日志类似上述。

这是因为打release包的时候,Firebase Crashlytics SDK需要将项目混淆后的Mapping等文件上传到Google的服务器,也就是app模块的uploadCrashlyticsMappingFileXXXRelease这个task,然后出现崩溃后我们可以直接在线上拿到正常的崩溃日志,而不是混淆后的日志。

然而问题就出在上传Mapping文件到Google服务器这一步,这里你就必须要科学上网了。

然而当你开启科学上网的软件后,如果不在项目中设置相应的代理信息,编译还是会出错,所以我们还需要在项目的gradle.properties中进行相应的设置:

systemProp.https.proxyHost=xxx.xxx.xxx.xxx
systemProp.https.proxyPort=xxxx

proxyHost:代理的主机的地址,如果是你自己电脑开的科学上网软件,那么可以填写127.0.0.1;
proxyPort:代理的端口地址,一般你的科学上网软件开启之后你可以去软件的设置中查看下它的代理端口是多少然后填写到这里就可以了;

所以以上就是问题的原因及一个解决办法。

但是有的同学说了,我们都是在内网服务器上部署Jenkins然后自动打包的,那我们要在打包服务器上也这么搞么?一般不建议这么搞,因为服务器上搞个科学上网还是很容易被封(前车之鉴了)的吧。所以要么服务器直接部署在海外,然后又有同学问了,我们代码和构件仓库都在内网啊,哈哈哈哈,问的好,找运维同学帮忙吧。
好了,简单说下我们的方式吧。目前我们是部署在了内网,因为内网的各种优势就不用说了吧,在项目app模块的build.gradle文件中直接关闭上面出现问题的Task:

gradle.taskGraph.whenReady {
    tasks.each { task ->
        if (task.name.contains("uploadCrashlyticsMappingFile")) {
            task.enabled = false
        }
    }
}

这样的话,自动给测试人员打release包的时候,都不需要和Google的服务器打交道了。但是问题就是,你所有测试人员的崩溃日志就全是混淆后的日志了,无法直视。

然后打正式生产环境的release包的话,建议还是按照一开始的办法,老老实实自己科学上网然后项目中设置代理参数进行打包。

总之我就小声BB下,希望Google大大考虑下各国国情,不然这也太麻烦了,害。

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源