使用vscode新建Flutter项目之后运行的时候可能会(大部分情况)报以下错误提示:
Exception in thread "main" java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:225)
at java.util.zip.ZipFile.<init>(ZipFile.java:155)
at java.util.zip.ZipFile.<init>(ZipFile.java:169)
at org.gradle.wrapper.Install.unzip(Install.java:214)
at org.gradle.wrapper.Install.access$600(Install.java:27)
at org.gradle.wrapper.Install$1.call(Install.java:74)
at org.gradle.wrapper.Install$1.call(Install.java:48)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
at org.gradle.wrapper.Install.createDist(Install.java:48)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done 1.8s
[!] Gradle threw an error while downloading artifacts from the network.
Retrying to download...
简单分析一下这个错误提示,错误信息的最后一句有这样一句:
Gradle threw an error while downloading artifacts from the network.
这句话的意思是,通过网络下载Gradle配置文件的时候出错了。那么我们的项目中有哪些地方是需要配置并且下载gradle的呢?主要是build.gradle和gradle-wrapper.properties这两个文件。
既然知道问题大概出在什么位置了,那就从这两个文件入手试着解决一下看看。
首先是build.gradle文件,我们知道这个文件里的配置信息都是通过google和jcenter下载的,这两个下载源在国内访问都是很慢的,我们把镜像源改为国内的阿里云试一下,注意需要同时配置buildscript、allprojects两个节点,把这两个节点下的repositories内容替换成阿里云镜像源:
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google'}
maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin'}
jcenter()
然后执行flutter run运行程序,发现依然报错,这就说明这个错误和镜像源本身是没有关系的,但是为了后续使用方便,我们依然保留阿里云的镜像源配置。
既然配置镜像源的方式没有解决我们的问题,那么我们就试着修改一下gradle-wrapper.properties中的内容。
vscode创建的flutter项目,其gradle-wrapper.properties文件中默认为我们配置的gradle版本是5.6.2,我本地有比较新的6.7-all版本。我们把默认的版本替换成本地比较新的
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
然后再次执行flutter run,发现没有报错并且应用成功安装到了手机上。问题解决,那么文章开头提到的错误应该是跟gradle的版本比较低有关了。