构建Cordova Android项目时出错

时间:2016-05-20 14:14:46

标签: java android cordova ant

您好我正在尝试使用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 个答案:

答案 0 :(得分:14)

正如您所提到的,它看起来更像是一个网络问题。如果您使用受限代理网络,则gradle下载将失败。如果出现网络限制,您可以按照以下步骤解决此问题:

1) Download the required gradle version zip file from gradle distribution link and save it in local folder.

2) Navigate to PROJECT_ROOT_FOLDER/platforms/android/cordova/lib/builders folder and edit GradleBuilder.js file

3) Change the line from var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip'; to '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'; and save the file

4) Try rebuilding android build.

您还可以尝试以下快速修复,

1) In command prompt execute the following command: export CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=file:///local/path/to/folder/where/gradle/zip/is/saved/gradle-2.2.1-all.zip

2) Execute the following command: cordova run android

答案 1 :(得分:3)

您需要通过将这些行添加到~/.gradle/gradle.properties来设置gradle代理(如果文件不存在,则创建该文件):

systemProp.http.proxyHost=myproxy.com
systemProp.http.proxyPort=123
systemProp.https.proxyHost=myproxy.com
systemProp.https.proxyPort=123

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

答案 2 :(得分:0)

当我通过此错误执行命令 cordova build android 时,我遇到了同样的问题。我被尝试了更多1小时终于禁用我的防病毒软件(Avast)并再次执行命令,现在它已成功执行。

答案 3 :(得分:0)

我已使用浏览器从https://services.gradle.org/distributions下载了证书并将其添加到我的Java安装cacert文件中,之后它对我有用..

示例:

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

答案 4 :(得分: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。

此外,还使用指向本地Gradle zip文件的分发URL更新了project / platforms / android / cordova / lib / builders / GradleBuilder.js。 (Http链接也有效)。

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