构建Cordova Android项目时出错

嗨我正在尝试使用以下环境在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导致exception

 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.(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

即便如此,我也无法解决这个问题。 我明白了这个环境。 构建脚本中不接受路径变量,但我不确定在何处更改或绕过此步骤。

正如您所提到的,它看起来更像是一个网络问题。 如果您使用受限代理网络,则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

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

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

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

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

我使用浏览器从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