概述
文章目录
- Gradle
- Gradle Wrapper
- 属性配置
- Android Gradle 插件
- 使用 Android Gradle 插件
- Gradle 构建项目中出现的问题
- 无法获取 '.pom' 后缀的 Android Gradle 插件文件
- ERROR: Received close_notify during handshake
- Failed to resolve: com.android.support:appcompat-v7:26.0.0
- 所需的 Gradle 版本和 Android Gradle 插件版本不对应
- Gradle 构建项目时一直 Buildling 或 refreshing
Gradle
https://en.wikipedia.org/wiki/Gradle
下载地址:https://services.gradle.org/distributions/
https://gradle.org/releases/
Gradle是一个开源构建自动化系统,它基于Apache Ant和Apache Maven的概念,并引入了一种基于Groovy的领域特定语言(DSL),而不是Apache Maven用于声明项目配置的XML形式。Gradle使用有向无环图(“ DAG”)确定任务可以运行的顺序。
Gradle是为多项目构建而设计的,该项目可能会变得很大。它通过智能地确定构建树的哪些部分是最新的来支持增量构建。仅依赖那些部分的任何任务都不需要重新执行。
本机位置:%HOME%.gradlewrapperdists
jar包位置:%HOME%.gradlecachesmodules-2files-2.1
Android Studio 新建项目默认使用的 Gradle 位置:Android Studio 安装目录gradle
gradle存放目录
Gradle Wrapper
Gradle Wrapper 是对Gradle 的包装,它的作用是简化Gradle本身的下载、安装和构建,比如它会在我们没有安装Gradle的情况下,去下载指定版本的Gradle并进行构建。Gradle的版本很多,所以有可能出现版本兼容的问题,这时就需要Gradle Wrapper去统一Gradle的版本,避免开发团队因为Gradle版本不一致而产生问题。
来自 http://liuwangshu.cn/application/gradle/1-study-gradle.html
gradle-wrapper.jar:项目使用的gradle包装器,保存在项目目录 gradlewrapper
下
gradle-wrapper.properties :负责配置包装器运行时行为的属性文件,用来配置使用哪个版本的gradle等属性。
属性配置
gradle-wrapper.properties:Gradle Wrapper的属性文件,用来配置Gradle Wrapper,可以在这里指定项目所需的gradle版本。
Gradle 4.2.1版本对应的gradle-wrapper.properties如下所示:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-4.2.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
字段的含义如下:
- distributionBase:Gradle解包后存储的主目录。
- distributionPath:distributionBase指定目录的子目录。distributionBase+distributionPath就是Gradle解包后的存放位置。
- distributionUrl:Gradle发行版压缩包的下载地址。
- zipStoreBase:Gradle压缩包存储主目录。
- zipStorePath:zipStoreBase指定目录的子目录。zipStoreBase+zipStorePath就是Gradle压缩包的存放位置。
这里我们最需要关注的是 distributionUrl 这个字段,如果官方的地址下载不了或者缓慢,可以将这个地址换为其他的镜像地址,或者干脆把 Gradle 发行版压缩包放在服务器上以供下载。
来自 https://juejin.im/post/5c9395bcf265da612c3a3def
Android Gradle 插件
https://developer.android.com/studio/releases/gradle-plugin?hl=zh-cn
下载地址:https://jcenter.bintray.com/com/android/tools/build/gradle/
Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。
本机位置:%HOME%.gradlecachesmodules-2files-2.1com.android.tools.buildgradle
使用 Android Gradle 插件
您可以在 Android Studio 的 File > Project Structure > Project 菜单中指定插件版本,也可以在顶级 build.gradle 文件中进行指定。该插件版本适用于在相应 Android Studio 项目中构建的所有模块。以下示例从 build.gradle 文件中将插件的版本设置为 3.5.2:
buildscript {
repositories {
// Gradle 4.1 及更高版本支持 Google 的 Maven 仓库使用 google() 方法获取。
// 并且您需要包括此仓库才能下载 Android Gradle 插件 3.0.0 或更高版本。
google()
...
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
}
}
注意:请勿在版本号中采用动态依赖项(例如 ‘com.android.tools.build:gradle:2.+’),否则可能会导致意外的版本更新和难以解析的版本差异。
如果指定的插件版本尚未下载,则 Gradle 会在您下次构建项目时进行下载;或者,您也可以在 Android Studio 菜单栏中依次点击 Tools > Android > Sync Project with Gradle Files 进行下载。
Gradle 构建项目中出现的问题
无法获取 ‘.pom’ 后缀的 Android Gradle 插件文件
• org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all artifacts for configuration ':classpath'.
• org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.android.tools.build:gradle:3.6.2.
• org.gradle.api.resources.ResourceException: Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.2/gradle-3.6.2.pom'.
• org.gradle.internal.resource.transport.http.HttpRequestException: Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.2/gradle-3.6.2.pom'.
• org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:443 [/127.0.0.1] failed: Connection refused: connect
• java.net.ConnectException: Connection refused: connect
根据提示,连接 127.0.0.1:443 出错。而将链接通过浏览器打开可以下载(使用了代理)。
在 File -> Settings -> Appearance & Behavior -> System Settings -> HTTP Proxy 中设置的代理不起作用。
原因是在 HTTP Proxy 中设置的代理只在应用更新时使用。而 Gradle 使用的代理需在 %HOME%.gradlegradle.properties
文件中进行全局设置。
出现 127.0.0.1:443 出错正是因为在该文件中将端口指为了 443 端口,实际代理使用的是 10809 端口,正确的字段如下所示:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10809
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10809
大家都是怎样处理Gradle中的这个文件下载慢的问题的?
同样的问题导致:
- Cause: jcenter.bintray.com:443 failed to respond(将代理端口设置成了 443 端口)
ERROR: Received close_notify during handshake
握手时受到关闭通知,close_notify 是 SSL 的通知标志,该错误原因是获取连接失败,被墙或是代理设置未生效,前者购买 VPN,后者重启 VS。
同样的问题导致:
- SSL peer shut down incorrectly
Failed to resolve: com.android.support:appcompat-v7:26.0.0
从 api 26 开始,support libraries 需要从 google 的 maven 仓库下载,所以需要在 project 的 build.gradle 的 allprojects 的 repositories 中添加 google()
或者 maven { url 'https://maven.google.com' }
即可。
同样的问题导致:
- Failed to resolve: 添加的依赖包,添加相应的仓库即可,如 mavenCentral() 和 jcenter(),这些仓库不需要翻墙。
- Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.android.tools.build:gradle:3.6.2.
-
• org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all artifacts for configuration ':classpath'. • org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.android.tools.build:gradle:3.6.2.
所需的 Gradle 版本和 Android Gradle 插件版本不对应
FileNotFoundException: Entry fileTemplates//code/Google Test Fixture SetUp Method.cc.ft not found in /D:/Android%20Studio/lib/idea.jar
Gradle sync failed: Unable to find method 'com.android.build.gradle.tasks.factory.AndroidJavaCompile.setDependencyCacheDir(Ljava/io/File;)V'.
Gradle(Error:No such property: GradleVersion for class: JetGradlePlugin)
下表列出了各个 Android Studio 版本所需的 Android Gradle 插件版本。
https://developer.android.com/studio/releases#android_gradle_plugin_and_android_studio_compatibility
Android Studio 版本 | 所需插件版本 |
Arctic Fox | 2020.3.1 | 3.1-7.0.x |
Bumblebee | 2021.1.1 | 3.2-7.1.x |
Chipmunk | 2021.2.1 | 3.2-7.2.x |
下表列出了各个 Android Gradle 插件版本所需的 Gradle 版本。要获得最佳性能,您应该使用 Gradle 和插件这两者的最新版本。
https://developer.android.com/studio/releases/gradle-plugin.html#updating-plugin
插件版本 | 所需的 Gradle 版本 |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1+ |
2.3.0+ | 3.3+ |
3.0.0+ | 4.1+ |
3.1.0+ | 4.4+ |
3.2.0 - 3.2.1 | 4.6+ |
3.3.0 - 3.3.2 | 4.10.1+ |
3.4.0 - 3.4.1 | 5.1.1+ |
3.5.0 - 3.5.4 | 5.4.1+ |
3.6.0 - 3.6.4 | 5.6.4+ |
4.0.0+ | 6.1.1+ |
4.1.0+ | 6.5+ |
4.2.0+ | 6.7.1+ |
7.0 | 7.0+ |
7.1 | 7.2+ |
7.2 | 7.3+ |
插件的版本在项目下的 gradle.properties 的 buildscript 的 dependencies 中设置:
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Gradle 版本在项目的 gradle 目录下的 gradle-wrapper.properties 中设置:
#Sun Sep 15 00:31:33 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
同样的问题导致:
- Error:(1, 0) Minimum supported Gradle version is 3.3. Current version is 3.2.
- Android Studio 无法自动下载依赖,原因是 Gradle 插件版本低,升级插件即可。
- Could not find method implementation() for arguments [directory ‘libs’](此错误是Gradle插件的版本太低,高版本的Gradle插件使用implementation替换了compile)
Gradle 构建项目时一直 Buildling 或 refreshing
网速慢或者被墙导致无法获取所需的 Gradle。
前者通过浏览器下载对应版本的 Gradle,放入 %HOME%.gradlewrapperdists
相应版本文件夹下。如需要 gradle-3.3-all 版本。那么进入 %HOME%.gradlewrapperdistsgradle-3.3-all55gk2rcmfc6p2dg9u9ohc3hw9
目录中,删除除 gradle-3.3-all.zip.lck 文件外的所有文件夹和文件,复制下载好的 gradle-3.3-all.zip 到该目录,重新打开 Studio 即可。
后者开代理、购买 VPN 或者使用国内存储库获取。
最后
以上就是曾经红牛为你收集整理的Android - Gradle 项目构建GradleGradle WrapperAndroid Gradle 插件的全部内容,希望文章能够帮你解决Android - Gradle 项目构建GradleGradle WrapperAndroid Gradle 插件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复