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

Posted

技术标签:

【中文标题】Cordova 在 gradle-wrapper.properties 文件中构建更改 distributionUrl【英文标题】:Cordova build changes distributionUrl in gradle-wrapper.properties file 【发布时间】:2016-09-04 15:53:57 【问题描述】:

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

 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

有什么办法防止这种情况发生?

【问题讨论】:

【参考方案1】:

可以猜到,当您发出“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 的 URL;

现在您可以运行构建命令了!

灵感来自以下 SO; install gradle for using in cordova build android

【讨论】:

为 Android 重新创建项目将在相同的情况下结束,但现在这是一个很好的解决方案。我在 GitHub 上检查了 GradleBuilder.js 文件的主分支,它已更改为 gradle-2.13-全部.zip。下一个 cordova 版本可能也会解决这个问题。 谢谢你,shamaleyte!现在我只需要找到一个地方来修复我过去几天一直在扯的头发。 @brianfit,如果您找到恢复头发簇的解决方案,请告诉我们:)) 关于如何使用全局安装的 gradle 版本来代替这种方法的任何想法?因为每次重新创建平台时,Cordova 都会自动生成 platforms/android 文件夹中的所有内容。 Cordova-android 6.3.0 使用的 gradle 3.3 太旧了。 在我的情况下,我还必须编辑: $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】:

我认为最好导出变量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

【讨论】:

长期使用这个解决方案,效果很好。但是最近遇到了新版本的问题。我忘记了我使用过这个,不得不回到我的 .bash_profile 并更新到新版本来修复它。 (>_ 这是最好的快速解决方案。 如果您使用的是 windows,导出将不起作用。请改用 setx,如下所示 - >setx CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL http\\://services.gradle.org/distributions/gradle-6.4.1-all.zip【参考方案3】:

更新日期:2017 年 5 月 21 日

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

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

假设您已完成此操作但仍无法正常工作,请继续阅读。

可选(可能):仅供参考 - 就我个人而言,我使用 SDK Man 在我的机器上安装了匹配版本的 Gradle。

假设您已经有了一个可以使用 Marshmallow 或 Nougat(或两者兼有)的 Android Studio 模拟器。

就我而言,我当时正试图让 Cordova 工作。

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

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应用程序的platforms/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

解释:如果您运行搜索,您会发现此环境变量是此环境的可选覆盖。多变的。 查看check_gradle 的变量赋值,在platforms/android/cordova/lib/builders/GradleBuilder.js 下声明

现在运行:

cordova run android --verbose

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

【讨论】:

感谢您的解释,对理解和运行非常有帮助...在我的情况下,platforms/android/cordova/check_reqs.js 位于platforms/android/cordova/lib/check_reqs.js 但是(Windows)。 @PediT。感谢您的反馈,很高兴听到您取得了进展。 我还打开 Android Studio,然后从菜单中“构建 > 清理项目”,然后我也可以使用 AndroidStudio 构建...感谢分享【参考方案4】:

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

尽可能自救:

cordova platform rm android
cordova platform add android

【讨论】:

【参考方案5】:

在platforms/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】:

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

在 Windows 上,更改 File -> Settings -> Builds,Execution,Deployment -> Build Tools -> Gradle -> Gradle home 路径

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

否则使用默认的 gradle 包装器并像这样编辑Project\gradle\wrapper\gradle-wrapper.properties file's distributionUrl

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

【讨论】:

问题实际上是我无法使用您的“其他”解决方案来实现它。选择了“使用默认 gradle wrapper(推荐”)选项。当我运行 cordova 命令时,更改后的 distributionUrl 将恢复到以前的版本。太伤心了。【参考方案7】:

这发生在我身上,因为我没有使用最新版本的 cordova-android 构建。所以:

cordova platform rm android
cordova platform add android@latest

不要使用@latest 指令。 还请务必更新下载最新版本的 gradle 并将其包含在适当的目录中,如其他答案中所指出的那样。

【讨论】:

【参考方案8】:

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

依赖 类路径 'com.android.tools.build:gradle:X.X.X' 和 任务包装器(类型:包装器) gradleVersion = 'X.X'

在此处查看参考https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle 更改 X.X

【讨论】:

build.gradle 是cordova中生成的文件。你会一直这样做

以上是关于Cordova 在 gradle-wrapper.properties 文件中构建更改 distributionUrl的主要内容,如果未能解决你的问题,请参考以下文章

Gradle构建详解(gradle-wrapper.properties)

Android Gradle 插件Gradle 基础配置 ⑤ ( gradle-wrapper.properties 配置分析 | GRADLE_USER_HOME 目录 )

如何将丢失的 gradle-wrapper.jar 添加回 Git 存储库以供 Jenkins 完成其工作

Android Gradle 插件Gradle 基础配置 ③ ( 生成 Gradle Wrapper 配置 | 分析生成的 gradle-wrapper.properties 配置文件 )

错误记录Android Studio 中查看 Gradle 配置的方法源码 ( 配置 gradle-wrapper.properties 中版本为 gradle-x.x.x-all.zip )

如何解决在android stduio下导入不同gradle版本工程慢的问题