文章目录
- 1、简介
- 1.1 Android简介
- 1.2 Gradle简介
- 1.3 Gradle的配置文件
- 1.3.1 应用模块的 build.gradle
- 1.3.2 项目的 settings.gradle
- 1.3.3 gradle-wrapper.properties
- 2、Gradle文件下载失败
- 2.1 手动下载gradle
- 2.2 配置本地gradle
- 2.3 配置国内镜像
- 3、repositories配置国内源
- 3.1 单个项目配置
- 3.2 全局配置
- 结语
1、简介
1.1 Android简介
Android是一个开源的,基于Linux的移动设备操作系统,主要使用于移动设备,如智能手机和平板电脑。Android是由谷歌及其他公司带领的开放手机联盟开发的。
Android 构建系统会编译应用资源和源代码,然后将它们打包成 APK 或 Android App Bundle 文件,供您测试、部署、签名和分发。
1.2 Gradle简介
Gradle 是一个专注于灵活性和性能的开源构建自动化工具。Gradle 构建脚本是使用 Groovy 或 Kotlin DSL 编写的。
Gradle支持许多主要的IDE,包括Android Studio,Eclipse,IntelliJ IDEA,Visual Studio 2019和XCode。 您还可以通过终端中的命令行界面或通过持续集成服务器调用 Gradle。
- 高度可定制 — Gradle 的建模方式以最基本的方式进行定制和扩展。
- 快速 — Gradle 通过重用先前执行的输出、仅处理更改的输入以及并行执行任务来快速完成任务。
- 功能强大 — Gradle 是 Android 的官方构建工具,支持许多流行的语言和技术。
Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。虽然 Android 插件通常会与 Android Studio 的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可独立于 Android Studio 运行并单独更新。
Gradle 和 Android Gradle 插件独立于 Android Studio 运行。这意味着,您可以在 Android Studio 内、计算机上的命令行或未安装 Android Studio 的计算机(如持续集成服务器)上构建 Android 应用。
Gradle 简单来讲就是一个构建工具,也就是一些复杂的操作不需要开发者自己去弄,而是通过构建工具去完成的。Gradle有个非常突出的特点,就是它自身就是一门语言(基于Groovy),是一种自动化构建语言,相较于Maven中基于XML的各种繁琐配置,Gradle使用Groovy语言构建文件更加的灵活。Gradle是Android Studio默认的构建工具,它提高了Android的开发效率,它的作用就是管理项目中的依赖、打包、编译……。要注意的是,Gradle它并不是独属于Android。
JCenter 代码库已于 2021 年 3 月 31 日变为只读代码库。请勿添加jcenter()代码库,以免获取过时的依赖项。
1.3 Gradle的配置文件
1.3.1 应用模块的 build.gradle
如需向您的项目添加依赖项,请在模块的 build.gradle 文件的 dependencies 代码块中指定依赖项配置,如 implementation。应用模块的以下 build.gradle 文件包含三种不同类型的依赖项:plugins 、android 、dependencies 。
其中dependencies的每种依赖项配置都要求不同种类的库依赖项,如下所示:
// 本地库模块依赖项
implementation project(':mylibrary')
// 本地二进制文件依赖项
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation files('libs/foo.jar', 'libs/bar.jar')
// 远程二进制文件依赖项
implementation 'com.example.android:app-magic:12.3'
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
1.3.2 项目的 settings.gradle
settings.gradle 文件(对于 Groovy)或 settings.gradle.kts 文件(对于 Kotlin 脚本)位于项目的根目录下。此设置文件会定义项目级仓库设置,并告知 Gradle 在构建应用时应将哪些模块包含在内。多模块项目需要指定应包含在最终 build 中的每个模块。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {//这里是gradle脚本执行所需依赖,分别是对应的maven库和插件
repositories {
google()//从Android Studio3.0后新增了google()配置,可以引用google上的开源项目
jcenter()//是一个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引用 jcenter上的开源项目
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'此处是android的插件gradle,gradle是一个强大的项目构建工具
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {//这里是项目本身需要的依赖,比如项目所需的maven库
repositories {
google()
jcenter()
}
}
// 运行gradle clean时,执行此处定义的task任务。
// 该任务继承自Delete,删除根目录中的build目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
delete rootProject.buildDir
}
1.3.3 gradle-wrapper.properties
每一个用gradle编译的工程,都会有一个gradle\wrapper目录。该目录下有2个文件:gradle-wrapper.jar和gradle-wrapper.properties。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl是要下载的gradle的地址,使用哪个版本的gradle,就在这里修改。
下载的gradle-5.4.1-bin.zip存放到C:\Users<user_name>.gradle\wrapper\dists目录中。
gradle的3种版本:
gradle-xx-all.zip是完整版,包含了各种二进制文件,源代码文件,和离线的文档。例如,https://services.gradle.org/distributions/gradle-5.4.1-all.zip
gradle-xx-bin.zip是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。例如,https://services.gradle.org/distributions/gradle-5.4.1-bin.zip
gradle-xx-src.zip是源码版,只包含了Gradle源代码,不能用来编译你的工程。例如,https://services.gradle.org/distributions/gradle-5.4.1-src.zip
其中,GRADLE_USER_HOME表示用户目录。
在windows下是%USERPROFILE%/.gradle,例如C:\Users\<user_name>\.gradle\。
在linux下是$HOME/.gradle,例如~/.gradle。
2、Gradle文件下载失败
Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-XXX?
Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。虽然 Android 插件通常会与 Android Studio 的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可独立于 Android Studio 运行并单独更新。
2.1 手动下载gradle
检查build.gradle对应的Gradle Plugins插件版本:
https://developer.android.google.cn/studio/releases/gradle-plugin.html
下载指定的gradle版本到本地。
查看C:\Users\用户名.gradle\wrapper\dists下的gradle压缩包,看自己有啥版本的压缩包,如果都没有就去下载一个。
打开目录:C:\Users\tomcat.gradle\wrapper\dists
浏览器打开 https://gradle.org/releases/ 并找到 xxx.zip 文件下载。
# 官网
https://services.gradle.org/distributions/
# 腾讯
https://mirrors.cloud.tencent.com/gradle/
https://downloads.gradle-dn.com/distributions/gradle-5.4.1-all.zip
把下载好的 zip 复制到上面那个目录,然后回到 android studio ,右键Gradle,刷新,重启Androidstudio还是不行的话,就继续下一步操作。
2.2 配置本地gradle
配置项目的gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
// 或
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-5.4.1-all.zip
// 或
distributionUrl=file:///C:/Users//tomcat//.gradle//wrapper//dists//gradle-5.4.1-all.zip
修改项目的build.gradle为对应的Gradle Plugins插件版本:
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
如果指定的插件版本尚未下载,则 Gradle 会在您下次构建项目时进行下载;或者,您也可以在 Android Studio 菜单栏中依次点击 File > Sync Project with Gradle Files 进行下载。
2.3 配置国内镜像
https://mirrors.cloud.tencent.com/gradle/
腾讯做了国内镜像可以直接下载:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-5.4-rc-1-all.zip
3、repositories配置国内源
阿里云Maven中央仓库为 阿里云云效 提供的公共代理仓库,帮助研发人员提高研发生产效率,使用阿里云Maven中央仓库作为下载源,速度更快更稳定。
https://developer.aliyun.com/mvn/guide?spm=a2c40.maven_devops2020_goldlog_.0.0.275c3054yut6Ld
https://developer.aliyun.com/article/621196
-
Q:首页无法浏览public库的内容?
-
A:public库是group库,其实代理了maven central和jcenter仓库。你可以浏览proxy库central或jcenter的内容,凡是里面有的包都可以通过public库下载。
而我们常用的 public 仓库,其实是 central 仓库和 jcenter 仓库的聚合,所以配置了 public 仓库,就不需要再配置 jcenter 的仓库了。 -
Q: 为什么你配置里用的 URL 都是 https://maven.aliyun.com/repository/public,而我看其他的人/文章,都用的是 http://maven.aliyun.com/nexus/content/groups/public 呢?
-
A: 阿里云在前几年对 https://maven.aliyun.com 进行了代码和架构上的改造,新版的 https://maven.aliyun.com 下载速度更快,支持高并发,而且全站进行了 HTTPS 加密,更安全。而新版的 Maven Mirror 地址,就是 https://maven.aliyun.com/repository/{reponame},然而阿里云为了保持旧地址的兼容,所以旧地址依然可以使用,但推荐使用新地址。
3.1 单个项目配置
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
}
}
或者
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
}
}
或者
buildscript{
repositories{
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
mavenLocal()
mavenCentral()
}
dependencies{
classpath "com.android.tools.build:gradle:3.6.0"
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
mavenLocal()
mavenCentral()
}
}
或者
buildscript {
repositories {
maven { url 'http://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
}
}
allprojects {
repositories {
maven { url 'http://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
}
}
3.2 全局配置
在操作系统当前用户的 HOME 目录,找到 .gradle 文件夹,在这个文件夹下面创建一个文本文件 init.gradle,完整的文件路径可能如下:在${USER_HOME}/.gradle/下创建init.gradle文件,在此文件中加入如下代码片段:
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
}
}
maven {
url ALIYUN_REPOSITORY_URL
url ALIYUN_JCENTER_URL
}
}
}
或者
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public'
def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
remove repo
}
if (url.startsWith('https://plugins.gradle.org/m2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
remove repo
}
}
}
maven { url ALIYUN_REPOSITORY_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
}
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!