下载Gradle时离子生成Android错误


73

我对Ionic框架很陌生:)

>npm install -g cordova
>npm install -g ionic
>ionic start test blank
>cd test
>ionic platform add android

当我使用' >ionic build android'时,开始下载gradle,但无法下载并出现错误。

是什么导致此错误,我该如何解决?

我下载了Gradle并将其安装在PC上,但它想再次下载。我可以离线将Gradle添加到项目中吗?

C:\Users\LENOVO2014\test>ionic build android
running cordova build android
Running command: "C:\Program Files\nodejs\node.exe" C:\Users\LENOVO2014\myApp\ho
oks\after_prepare\010_add_platform_class.js C:\Users\LENOVO2014\myApp
add to body class: platform-android
Running command: C:\Users\LENOVO2014\myApp\platforms\android\cordova\build.bat
ANDROID_HOME=D:\program\Programing\Android\sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_31
Running: C:\Users\LENOVO2014\myApp\platforms\android\gradlew cdvBuildDebug -b C:
\Users\LENOVO2014\myApp\platforms\android\build.gradle -Dorg.gradle.daemon=true
Downloading http://services.gradle.org/distributions/gradle-2.2.1-all.zip
................................................................................
................................................................................
................................................................................
............................................
Exception in thread "main" java.lang.RuntimeException: java.net.SocketException:
 Connection reset
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAcc
essManager.java:78)
        at org.gradle.wrapper.Install.createDist(Install.java:47)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:189)
        at java.net.SocketInputStream.read(SocketInputStream.java:121)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
        at sun.net.www.MeteredStream.read(MeteredStream.java:134)
        at java.io.FilterInputStream.read(FilterInputStream.java:133)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Http
URLConnection.java:3335)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Http
URLConnection.java:3328)
        at org.gradle.wrapper.Download.downloadInternal(Download.java:63)
        at org.gradle.wrapper.Download.download(Download.java:45)
        at org.gradle.wrapper.Install$1.call(Install.java:60)
        at org.gradle.wrapper.Install$1.call(Install.java:47)
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAcc
essManager.java:65)
        ... 3 more

C:\Users\LENOVO2014\myApp\platforms\android\cordova\node_modules\q\q.js:126
                    throw e;
                          ^
Error code 1 for command: cmd with args: /s /c "C:\Users\LENOVO2014\myApp\platfo
rms\android\gradlew cdvBuildDebug -b C:\Users\LENOVO2014\myApp\platforms\android
\build.gradle -Dorg.gradle.daemon=true"
ERROR building one of the platforms: Error: C:\Users\LENOVO2014\myApp\platforms\
android\cordova\build.bat: Command failed with exit code 1
You may not have the required environment or OS to build this project
Error: C:\Users\LENOVO2014\myApp\platforms\android\cordova\build.bat: Command fa
iled with exit code 1
    at ChildProcess.whenDone (C:\Users\LENOVO2014\AppData\Roaming\npm\node_modul
es\cordova\node_modules\cordova-lib\src\cordova\superspawn.js:131:23)
    at ChildProcess.emit (events.js:110:17)
    at maybeClose (child_process.js:1015:16)
    at Process.ChildProcess._handle.onexit (child_process.js:1087:5)

3
我有同样的问题,由于公司网络的代理,下载失败。我正在寻找一种解决方案,如果有发现,我会在这里发布。
Renan Le Caro

我回到科尔多瓦4女巫不使用Graddle:/
Renan Le Caro

1
您必须使用VPN。
哈麦德·霍萨尼

Answers:


109

我正在使用Ionic 1.7.14版本和在以下文件中找到的distributionUrl。 myApp/platforms/android/cordova/lib/builders/GradleBuilder.js.

我必须指出此答案中指定的本地下载的gradle。

我有同样的问题。我将gradle离线添加到我的项目中。

从已发布的链接(这里为http://services.gradle.org/distributions/gradle-2.2.1-all.zip)下载gradle之后,将其粘贴到喜欢的地方,myApp\platforms\android\gradle\gradle-2.2.1-all.zip并在build.js中myApp\platforms\android\cordova\lib\build.js找到以下内容:

var distributionUrl = 'distributionUrl=http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip';

并将其替换为您自己文件的位置:

var distributionUrl = 'distributionUrl=../gradle-2.2.1-all.zip';

8
真正的路径是:project / platforms / android / cordova / lib / builders / GradleBuilder.js
Ivan Ferrer

1
该解决方案“大部分”是正确的,尽管我们可能建议不要修改Cordova JS代码。似乎有一个可设置为完成此操作的环境变量,这是a)减少出错的可能性,b)在删除平台目录时不太可能被“覆盖”
Jeff Woodard,2016年

2
我在以下路径和文件“ myApp \ platforms \ android \ cordova \ lib \ builders \ GradleBuilder.js”中找到了分发网址
RAVI VAGHELA

1
我有同样的问题,但经过多次尝试后消失了。同意@Jeff
Jeril Kuruvila

2
@aishapp看到我的答案。这是正确的解决方案。这个答案不应该被接受,也不应该被高估。我们不应该修改cordova的代码。如果您运行“ cordova platform remove android”,这些东西将被删除
Jeff Woodard

52

由于上面发布的解决方案需要将.zip包含到大约55MB的文件夹中

您还可以通过以下命令强制CLI在构建过程中使用Ant而不是gradle:

cordova build android -- --ant

未安装ant。该怎么办?
杰伊·舒克拉

1
如果您有无法由ant构建的插件,则此方法将无效。
保罗

2
我试图在Linux ionic build android -- --ant ionic emulate android -- --ant
Mint

25

我遇到了这个问题,因为我们的网络代理阻止了zip文件的下载。这是我发现的:

注意:这与“已接受”的答案不同,因为我们没有直接修改Cordova的库。运行时,这种情况远不容易出现“错误”或被覆盖ionic state restore

  1. 下载gradle- http: //services.gradle.org/distributions/gradle-2.2.1-all.zip

  2. 将此文件放在中platforms/android/gradle。但是,如果要将其集成到构建过程中,则可能需要将其粘贴在不稳定程度较低的位置,并添加一个步骤将文件复制到该位置。

  3. 将环境变量设置CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL../gradle-2.2.1-all.zip

    • linux / osx:添加export CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL="../gradle-2.2.1-all.zip"到〜/ .bashrc文件
    • 视窗: setx CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL ../gradle-2.2.1-all.zip
  4. ionic build android


我没有在窗口中获取设置的环境变量点。如何在用户变量或系统变量中设置?
muneeb_ahmed19年

在第2点中,如何添加将文件复制到该位置的步骤。
muneeb_ahmed

1
@muneeb_ahmed您可以使用Powershell或通过“环境变量” UI来设置环境变量。stackoverflow.com/questions/32730544/...
杰夫·伍达德

1
另外,就在那里复制文件而言,您可以手动复制文件或将其添加到npm任务等中。有许多自动化的选择。这在某种程度上取决于您的其余过程。通常,该文件仅在离子状态恢复后才会消失。
Jeff Woodard

14

命令行中的另一个选项是$ export JAVA_OPTS="-Dhttp.proxyHost=proxy-url.com -Dhttp.proxyPort=911 -Dhttps.proxyHost=secure-proxy-url.com -Dhttps.proxyPort=911"在cordova build命令之前运行。


这使您不必为每个Signgle项目复制gradle文件和修改配置文件。
卢卡斯·马苏

但是每次都必须指定吗?
Mukus's

9

如果您需要在网络上使用代理,请在下面添加一个gradle.properties文件,%USER_HOME%/.gradle但用代理详细信息替换这些值。这对我有用。

gradlePropertiesProp=gradlePropertiesValue
sysProp=shouldBeOverWrittenBySysProp   
envProjectProp=shouldBeOverWrittenByEnvProp  
systemProp.system=systemValue    
systemProp.http.proxyHost=myproxy.com    
systemProp.http.proxyPort=8080    
systemProp.http.nonProxyHosts=\*.mydomain.com|localhost   
systemProp.https.proxyHost=myproxy.com    
systemProp.https.proxyPort=8080    
systemProp.https.nonProxyHosts=\*.mydomain.com|localhost

这是我的答案(macOS)。如果gradle.properties文件不存在,只需在“platforms/android 仅需要:systemProp.http.proxyHostsystemProp.http.proxyPort,“ systemProp.https.proxyHost,”systemProp.https.proxyPort
Jonathan Lin

9

科尔多瓦6.0.0 / Visual Studio代码0.10.6

TL; DR

手动下载http://services.gradle.org/distributions/gradle-2.2.1-all.zip

放入 appName\platforms\android\gradle\

set CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=..\gradle-2.2.1-all.zip

启动代码并进行编译。

说明:

GradleBuilder.js设置distributionUrl如下:

var distributionUrl = process.env ['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http \://services.gradle.org/distributions/gradle-2.2.1-all.zip';

脚本在 appName\platforms\android\gradle\wrapper

输出为:

下载文件://appname/platforms/android/gradle/gradle-2.2.1-all.zip


看来实际上这并不取决于Cordova 6,而是取决于Cordova Android 5.0-请参阅此问题。因此,当您将Cordova Android更新到5.0时,可以使用CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URLenv参数,而无需编辑任何构建文件。
jakub.g 2016年

6

大家好,我有同样的问题。

在platforms \ android \ cordova \ lib \ build.js文件中,我进行了更改

var distributionUrl = 'distributionUrl=http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip';

var distributionUrl = 'distributionUrl=http://services.gradle.org/distributions/gradle-2.2.1-all.zip';

而且有效。


将https更改为使用http
Mukus,2016年

2
抱歉,在我的build.js中,不是GradleBuilder.js中的此变量
Pedro Miguel

对我来说,它在/platforms/android/cordova/lib/builders/StudioBuilder.js和/platforms/android/cordova/lib/builders/GradleBuilder.js中
Rohit Dhiman

4

先前的解决方案似乎存在问题。至少没有人为我工作,我只是将其更改为:

var distributionUrl = 'http://localhost/gradle-2.2.1-all.zip';

然后就可以了。我不知道为什么他们都按如下方式添加“ distributionUrl =“(这对我不起作用):

 var distributionUrl = 'distributionUrl=http\\://localhost/gradle-2.2.1-all.zip';

顺便说一句,我正在使用离子2。

如果您不想使用,请注意路径localhost。它会自动myApp/platforms/android/gradle/wrapper在distributionUrl之前添加,例如,如果将gradle-2.2.1-all.zip放在myApp/platforms/android/gradle目录中,则需要设置:

var distributionUrl = '../gradle-2.2.1-all.zip';

这个工作我使用离子1科尔多瓦6(科尔多瓦-的Android 4.1.1)的
jakub.g

3

或者,如果您的本地主机上有Web服务器,请下载并放入gradle(正是经过测试的版本,即在此时为http://downloads.gradle.org/distributions/gradle-2.2.1-all.zip post)在www根目录中,并将应用程序目录中的platform \ android \ cordova \ lib \ build.js文件更改为以下内容:

 var distributionUrl = 'distributionUrl=http\\://localhost/gradle-2.2.1-all.zip';

在Windows下,将URL更改为本地文件(而不是http地址)对我不起作用,并且会抱怨该URL具有未知协议。



2

我最近也遇到过同样的问题,因此我到处搜索。

最后,对于最新版本,我找到了解决方案。

在“ ionic platform add android”命令之后,转到platform / android / cordova / lib / builders / GradleBuilder.js

搜索

http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip

并将其更改为

http\\://downloads.gradle.org/distributions/gradle-2.2.1-all.zip


0

当可以比顶部答案更容易做到时,此处所有答案都在说同一件事。更新您的Android SDK应该可以解决此问题,您可以在终端上执行以下操作:

android update sdk --no-ui --all --filter "extra-android-m2repository"

要么

android update sdk --no-ui --filter extra

另请参阅回购问题(本质上是相同的问题)。

但是,在进行该重建之后,它应该可以工作了。


0

听起来Windows Defender或某些其他防病毒系统正在干扰您的安装。因此,暂时停用防火墙并重新运行命令:

ionic build android (or ios)

最后,您收到消息BUILD SUCCESSFUL ...


0

就离子开发而言,您将必须使用以下提到的URL修改GradleBuilder.js中的distributionURL。

/android/cordova/lib/builders/GradleBuilder.js

var distributionUrl = process.env ['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'https://services.gradle.org/distributions/gradle-2.14.1-all.zip';



-1

更新Android平台对我有用:

  • 科尔多瓦平台更新Android
  • 科尔多瓦准备,
  • 科尔多瓦编译,最后
  • 科尔多瓦建立

-1

这是由于Gradle错误。

下载文件http://services.gradle.org/distributions/gradle-2.14.1-all.zip并将其解压缩到任何目录中,并通过打开cmd设置路径,然后输入:setx path(提取目录)/ bin

之后,重新打开cmd并通过发出命令来检查Gradle是否正常工作gradle -v。它显示了Gradle版本输出。现在错误已修复;运行ionic build android


-3

下载JDK版本8并删除所有现有版本。

并更新离子。

希望您的问题得到解决。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.