问题
(1) Android sutdio第一次打开一个工程巨慢怎么办?
(2) 手动配置Gradle Home为什么总是无效?
(3) 明明已经下载了Gradle,配置了gradle home,为什么打开工程还是去自动下载Gradle?
需要解决上面问题,需要了解一下知识。
Android Studio怎么知道该用哪个Gradle呢?
AS一个项目所用的Gradle是由我们的工程中下面这个文件决定的:
{your project}/gradle/wrapper/gradle-wrapper.properties
#Tue Mar 16 18:10:26 CST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
最后一排的distributionUrl 决定了这个项目使用的gradle版本,也就是说不同的项目可以使用不同的gradle版本,上面需要的gradle-6.8.3-bin.zip,有的可能是gradle-6.8.3-all.zip, 下载时下载对应的就行 。
原理:Android Studio打开一个工程时,首先会读取gradle-wrapper.properties 文件,从而知道这个工程需要哪个版本的gradle ,然后就会去保存gradle的文件夹GRADLE_USER_HOME 去找看存不存在这个版本的gradle,不存在则会去distributionUrl 去下载 搞清楚了这个流程,现在是不是明白了,为什么第一次打开一个工程会巨慢了吧,因为AS会去下载gradle。
Android Studio检查的路径在设置里的Gradle可以看到,根据上面的路径确定的绝对路径如下:C:\Users\xxxx.gradle\wrapper\dists
可以看到此目录下并没有gradle-6.8.3-bin
既然搞清楚了原理,也知道打开慢的原因是卡在下载gradle这一步,那么我们就自己下载gralde,然后配置上去 。
(1) 修改gradle-wrapper.properties
修改gradle-wrapper.properties 中的 distributionUrl,改成我们想要的版本,只改后面的版本就可以了,前面的部分不要改。具体版本看下面链接 (如果改为本地已下载的gradle版本,且是适合构建当前工程,那么从新构建就不用从新下载gradle了) :
Gradle下载地址:https://services.gradle.org/distributions/
(2) 打开项目
这个时候 AS将自动下载gradle,并创建好目录 。这时直接干掉Android Studio并退出(如果能停止gradle的下载进程,不用退出AS也是可以的),因为这一步 是为了得到AS自动创建的下载目录 ,定位到下面的目录:
Linux:
~/.gradle/wrapper/dists
windows:
C:\users\{user name}\.gradle\wrapper\dists
注意:Gradle是大家共用的,所以当然不会把Gradle放在项目文件中(不是不可以)
接着进入对应的gradle版本文件夹下,会发现 有一个一串乱码的文件夹 ,下载的文件就是放在这个一串乱码的文件夹里。
(3) 下载gradle
从上面{your project}/gradle/wrapper/gradle-wrapper.properties
文件中的Gradle下载地址,下载对应版本的gradle,建议使用下载器进行下载,例如迅雷,本例中为gradle-6.8.3-bin.zip,将下载的gradle-6.8.3-bin.zip复制到上图中一串乱码的文件夹下, 注意不要解压 。这样我们就跳过了下载gradle这一步。
把下载好的文件gradle-6.8.3-bin.zip 放入下面的文件夹中即可,不需要解压。
(4) 重新开启Android Studio,打开工程,ok,一下子就打开了(如果是停止了下载进程,直接点击右上角的gradle图标重新构建就好了).
另外,需要注意的是,gradle插件和gradle是两个独立的东西,gradle插件版本是由项目最外层的build.gradle文件决定的
app/build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
//添加阿里云镜像,加快同步速度
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.0-alpha10"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}