Cordova build在gradle-wrapper.properties文件中更改distributionUrl

时间:2016-05-09 21:08:52

标签: cordova gradle android-gradle

运行

时,我不断收到以下构建异常
 cordova run android --verbose
  • 出了什么问题: 评估根项目'android'时出现问题。
      

    无法应用插件[id'android']   Gradle版本2.10是必需的。当前版本是2.2.1。如果使用gradle包装器,请尝试将C:\ Users \ Project \ gradle \ wrapper \ gradle-wrapper.properties中的distributionUrl编辑为gradle-2.10-all.zip

原因是当我运行cordova build命令时,行被更改;

distributionUrl=http\://services.gradle.org/distributions/gradle-2.1.0-all.zip

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

有什么方法可以阻止这种情况吗?

8 个答案:

答案 0 :(得分:69)

可以猜到,当您发出“Cordova build android”命令时,会在场景后面运行一个脚本。需要找到此脚本才能查看为Gradle版本指定的配置。

你必须去检查以下js文件:

$PROJECT_ROOT/platforms/android/cordova/lib/builders/GradleBuilder.js

然后在文件中找到包含以下变量的行:

GradleBuilder.prototype.prepEnv

并检查distributionUrl变量:

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

这就是您要找的内容以及您需要更改为gradle-2.10-all.zip网址的内容;

现在你可以运行build命令了,你就去了!

受到以下SO的启发; install gradle for using in cordova build android

答案 1 :(得分:25)

我认为最好导出变量CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL

示例:

export
CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=http\\://services.gradle.org/distributions/gradle-2.14.1-all.zip

例如,如果您使用的是Mac,请将导出命令添加到.bash_profile

nano ~/.bash_profile

答案 2 :(得分:11)

更新日期:2017年5月21日

好的,这是一个非常讨厌的问题,我觉得有必要编写完整的说明来修复,希望它能节省其他人浪费的时间。以下是谷歌搜索的结合,阅读已接受的答案,以及从反复试验中解决问题。

在您执行任何其他操作之前..如果正在运行,请确保关闭 Docker 。一个症状是,在Android Studio中,模拟器加载对话框只是默默地消失。如果您从应用程序启动命令运行,您的应用程序只是等待连接到设备(发出消息)。

假设您已经这样做但仍无法正常工作,请继续阅读。

可选(可能):仅限fyi - 就个人而言,我使用SDK Man在我的计算机上安装匹配版本的Gradle。

假设您已经安装了Marshmallow或Nougat(或两者)的Android Studio模拟器。

就我而言,我当时正试图让科尔多瓦工作。

取决于您是否希望重新开始(推荐),然后:

cordova platform rm android
cordova platform add android

首先需要下载。根据您的操作系统下载以下内容:

https://dl.google.com/android/repository/tools_r25.2.3-windows.zip

https://dl.google.com/android/repository/tools_r25.2.5-linux.zip

(我在Mac上运行,所以下载了:)

https://dl.google.com/android/repository/tools_r25.2.5-macosx.zip

解压缩,然后将templates文件夹复制到/Users/arcseldon/Library/Android/sdk/tools

说明:查看module.exports.check_gradle下的platforms/android/cordova/check_reqs.js函数内的逻辑,了解它是如何尝试导出gradle包装器的路径的。这是合作它。

$ echo $ANDROID_HOME
/Users/arcseldon/Library/Android/sdk

我可以看到tools子目录,但其中没有templates个文件夹。 因此,请从已下载和解压缩的zip中复制templates文件夹,然后将其粘贴到$ANDROID_HOME/tools

您应该使用包含以下内容的路径层次结构:

/Users/arcseldon/Library/Android/sdk/tools/templates/gradle/wrapper 

现在从脚本的角度来看,它满足了路径搜索。

其次,检查您的cordova应用程序中的platform / android / build.gradle,然后搜索gradleVersion

task wrapper(type: Wrapper) { gradleVersion = '2.14.1' }

对于您的版本,请按以下网址从URL下载:

https://services.gradle.org/distributions/gradle-X.Y.Z-all.zip

根据需要替换X,Y,Z以匹配您的版本。

就我而言,

https://services.gradle.org/distributions/gradle-2.14.1-all.zip

其他例子:

https://services.gradle.org/distributions/gradle-3.3-all.zip https://services.gradle.org/distributions/gradle-2.4-all.zip

然后,下载后,将其放在本地驱动器上并使用ENV引用。变量。例如。 (更改为您的版本)

export CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=file:///Users/myusername/temp/gradle-2.14.1-all.zip

说明:如果您运行搜索,您会发现此环境变量是此env的可选覆盖。变量。 查看在check_gradle

下声明的platforms/android/cordova/lib/builders/GradleBuilder.js的变量分配

现在运行:

cordova run android --verbose

一切顺利,一切都应该现在和#34;只是工作"对于Android。就我而言,iOS是开箱即用的 - 但由于其他原因,我确实使用了Xcode 8.2而不是Xcode 8.3。

答案 3 :(得分:4)

这是发生在我们身上的,因为我们意外地让Android Studio构建了cordova项目,从而导致无尽的错误。

在可以的时候保存自己

cordova platform rm android
cordova platform add android

答案 4 :(得分:1)

您可以尝试以下方法解决问题,

在Windows上,更改Android Studio -> Preferences -> Builds,Execution,Deployment -> Build Tools -> Gradle -> Gradle home路径

在Mac OS上,更改Project\gradle\wrapper\gradle-wrapper.properties file's distributionUrl路径

否则使用默认的gradle包装并编辑distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip ,如下所示:

date -d "$VAR hours ago" +"%Y-%m-%d %H"

答案 5 :(得分:1)

内部平台/android/cordova/lib/builders/ProjectBuilder.js

在232行附近,您将看到:

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

根据需要调整gradle。

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

答案 6 :(得分:1)

这是我发生的事情,因为我没有使用最新版本的cordova-android进行构建。所以:

cordova platform rm android
cordova platform add android@latest

不带@latest指令。 还应确保下载最新版本的gradle,并将其包含在其他回答中指出的适当目录中。

答案 7 :(得分:-1)

尝试打开文件project / platforms / android / build.gradle并更新

依赖性{
classpath'com.android.tools.build:gradle:X.X.X'
}



任务包装器(类型:包装器){
gradleVersion ='X.X'
}

请参阅此处的参考https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle

更改X.X