构建Cordova Android项目时出现错误

5

你好,我正在尝试在Windows 7上使用以下环境构建带有Android插件的Cordova项目:

ANDROID_HOME=D:\DevTools\Android\Android_SDK_NDK\android-sdk
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45

我生成了一个Cordova项目。
>cordova create CordovaProject io.xyz.hellocordova CordovaApp

并添加了Android插件

>cordova platform add android

现在,在进行了这些步骤后,我尝试构建Android项目

>cordova build android

这是尝试下载 gradle-2.2.1-all.zip 时发生异常。
E:\Cordova\Workspace\HelloCordova>cordova build android --verbose
Executing "before_build"  hook for all plugins.
Executing "before_prepare"  hook for all plugins.
Searching PlatformJson files for differences between project vs. platform instal
led plugins
No differences found between project and android platform. Continuing...
Generating config.xml from defaults for platform "android"
Wrote out Android application name to "HelloCordova"
Wrote out Android package name to "com.gowtham.HelloCordova"
This app does not have launcher icons defined
updated project successfully
Executing "after_prepare"  hook for all plugins.
Executing "before_compile"  hook for all plugins.
ANDROID_HOME=D:\DevTools\Android\Android_SDK_NDK\android-sdk
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45
Downloading http://services.gradle.org/distributions/gradle-2.2.1-all.zip

Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException
: Connection timed out: connect
        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.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI
mpl.java:79)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.ja
va:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocket
Impl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java
:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
        at sun.net.www.http.HttpClient.New(HttpClient.java:308)
        at sun.net.www.http.HttpClient.New(HttpClient.java:326)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLC
onnection.java:996)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConne
ction.java:932)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection
.java:850)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
nection.java:1300)
        at org.gradle.wrapper.Download.downloadInternal(Download.java:59)
        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
Error: Error code 1 for command: cmd with args: /s,/c,"E:\Cordova\Workspace\Hell
oCordova\platforms\android\gradlew cdvBuildDebug -b E:\Cordova\Workspace\HelloCo
rdova\platforms\android\build.gradle -Dorg.gradle.daemon=true -Pandroid.useDepre
catedNdk=true"

E:\Cordova\Workspace\HelloCordova>gradle -version

------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------

Build time:   2014-11-24 09:45:35 UTC
Build number: none
Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.7.0_45 (Oracle Corporation 24.45-b08)
OS:           Windows 7 6.1 x86

可能是由于我的办公室防火墙/代理不允许下载zip文件,但我已经将zip文件解压并设置了路径变量为:
GRADLE_HOME = C:\gradle-2.2.1
即使如此,我仍然无法解决这个问题。我知道环境路径变量在构建脚本中不被接受,但我不确定在哪里更改或绕过此步骤。
5个回答

16

正如您所提到的,这更像是一个网络问题。如果您使用受限代理网络,gradle下载将失败。在出现网络限制的情况下,您可以通过以下步骤解决此问题:

1) 从gradle分发链接下载所需的gradle版本zip文件并保存到本地文件夹中。

2) 导航到PROJECT_ROOT_FOLDER/platforms/android/cordova/lib/builders文件夹并编辑GradleBuilder.js文件。

3) 将该行更改为var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip'; 更改为 'var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'file:///local/path/to/folder/where/gradle/zip/is/saved/gradle-2.2.1-all.zip'; 并保存该文件。

4) 尝试重新构建android构建。

您还可以尝试以下快速修复措施:

1) 在命令提示符中执行以下命令:export CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=file:///local/path/to/folder/where/gradle/zip/is/saved/gradle-2.2.1-all.zip

2) 执行以下命令:cordova run android


谢谢@Gandhi,非常好用...!!! 我按照你提到的方法设置了环境路径变量。CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=file:///local/path/to/folder/where/gradle/zip/is/saved/gradle-2.2.1-all.zip - Gowtham S
@SudarpoChong 很高兴能够帮到你。干杯! - Gandhi

3
您需要通过将以下行添加到~/.gradle/gradle.properties(如果文件不存在,请创建文件)来设置gradle代理:
systemProp.http.proxyHost=myproxy.com
systemProp.http.proxyPort=123
systemProp.https.proxyHost=myproxy.com
systemProp.https.proxyPort=123

当然,替换您的代理和端口。


我没有直接的代理主机和端口...我的网络代理是使用*.pac文件的自动配置脚本。我认为问题是由于无法下载zip归档文件,而且我在.gradle文件夹下也没有gradle.properties文件。正如我上面提到的,我单独下载了它,并将我的下载路径设置为该文件路径。感谢您的帮助.. - Gowtham S

0

我使用浏览器从https://services.gradle.org/distributions下载了证书,并将其添加到我的Java安装cacert文件中,之后它就可以正常工作了。

示例:

C:\Program Files\Java\jdk1.8.0_40\jre\lib\security> keytool -import -alias gradle -keystore cacerts -trustcacerts -fi le D:\Configurations\certificates\gradle.cer


0

当我执行命令cordova build android时,我遇到了同样的问题,它报错了。我试了一个多小时,最终我禁用了我的杀毒软件(Avast),然后再次执行命令,现在它成功执行了。


0

终于,我找到了答案,

问题是由于环境变量中存在多个Java引用。

我已经卸载了所有的JDK,并从环境变量中删除了所有的Java引用。 然后重新安装了jdk1.8.161(因为大多数人在8系列中使用此版本),并相应更新了环境变量。

请查找最终为我工作的软件包和版本。

Node.js version 13.8 with npm 6.13.6,
Cordova version 9 (installed globally),
Android SDK Latest with target up to android -25 & build tools.
Java JDK - 1.8.161.
Gradle - 2.14.1_all

环境变量引用

Node.js (installed in c drive),
Android SDK path,
Android SDK platforms path,
Android SDK build path,
Android SDK tools path,
Java JDK path (installed in c drive),
Java jre path (available along with jdk path in c drive),
Gradle path (extracted in c drive/gradle/),
Gradle zip path.

我没有在环境变量中提及Cordova。

此外,我更新了project/platforms/android/cordova/lib/builders/GradleBuilder.js文件,将分发URL指向本地Gradle zip文件。(HTTP链接也可以使用)。

我创建了一个hello world应用程序,使用android@6.0.0版本,并成功构建了APK。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接