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

sha*_*yte 31 gradle cordova android-gradle-plugin

我运行时不断收到以下构建异常

 cordova run android --verbose
Run Code Online (Sandbox Code Playgroud)
  • 出了什么问题:评估根项目'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
Run Code Online (Sandbox Code Playgroud)

distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip
Run Code Online (Sandbox Code Playgroud)

有什么办法可以防止这个?

sha*_*yte 75

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

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

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

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

GradleBuilder.prototype.prepEnv
Run Code Online (Sandbox Code Playgroud)

并检查distributionUrl变量:

var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip';
Run Code Online (Sandbox Code Playgroud)

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

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

灵感来自以下SO; 安装gradle在cordova build android中使用

  • 关于如何使用“全局安装的gradle版本”而不是此方法的任何想法?因为每次重新创建平台时,Cordova都会自动生成“ platforms / android”文件夹中的所有内容。Cordova-android 6.3.0使用的gradle 3.3太旧了。 (3认同)
  • 重新创建Android项目将以相同的情况结束,但现在这是一个很好的解决方案..我在GitHub上检查了主分支上的GradleBuilder.js文件,并将其更改为gradle-2.13-all.zip.下一个cordova版本可能也会解决这个问题. (2认同)
  • 就我而言,我还必须编辑:$ PROJECT_ROOT / platforms / android / cordova / lib / builders / StudioBuilder.js:在StudioBuilder.prototype.prepEnv = function(opts)下{... var distributionUrl = process.env ['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL '] || 'https \\://services.gradle.org/distributions/gradle-4.6-all.zip'; (2认同)

jor*_*ysp 28

我认为最好导出变量 CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL

例:

export
CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=http\\://services.gradle.org/distributions/gradle-2.14.1-all.zip
Run Code Online (Sandbox Code Playgroud)

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

nano ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的和快速的解决方案。 (2认同)

arc*_*don 12

更新:2017年5月21日

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

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

假设你已经这样做但仍然没有工作,请继续阅读.

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

假设您已经有一个使用Marshmallow或Nougat(或两者)的Android Studio模拟器.

在我的情况下,我当时试图让科尔多瓦工作.

根据您是否希望重新开始(推荐),然后:

cordova platform rm android
cordova platform add android
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

/Users/arcseldon/Library/Android/sdk/tools/templates/gradle/wrapper 
Run Code Online (Sandbox Code Playgroud)

现在,这从脚本的角度来满足路径搜索.

其次,检查您的cordova应用程序的平台/ android/build.gradle,并搜索gradleVersion.

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

对于您的版本,请从URL下载,如下所示:

https://services.gradle.org/distributions/gradle-XYZ-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
Run Code Online (Sandbox Code Playgroud)

说明:如果运行搜索,您会发现此环境变量是此env的可选覆盖.变量.请参阅check_gradle声明的变量赋值platforms/android/cordova/lib/builders/GradleBuilder.js

现在运行:

cordova run android --verbose
Run Code Online (Sandbox Code Playgroud)

一切顺利,现在一切都应该"适用于Android".就我而言,iOS是开箱即用的 - 但由于其他原因,我确实使用了Xcode 8.2而不是Xcode 8.3.


Lig*_*ard 5

这发生在我们身上是因为我们不小心让 Android Studio 构建了我们的cordova 项目,导致了无尽的错误。

在你可以的时候拯救自己:

cordova platform rm android
cordova platform add android
Run Code Online (Sandbox Code Playgroud)