Android 进阶——最大程度提升你的Android Studio 中Gradle编译速度完全攻略

   日期:2020-05-24     浏览:122    评论:0    
核心提示:最大程度提升你的Android Studio 中Gradle编译速度移动开发

文章大纲

  • 一、.gradle 、.gradle\caches及 .m2 目录
    • 1 .gradle和.gradle\caches目录
      • 1.1、解析xxx\gradle\wrapper\gradle-wrapper.properties文件下载Gradle
      • 1.2、解析根Project和Module目录下build.gradle脚本加载第三方库
    • 2、 .m2
  • 二、Android Studio 使用Gradle 编译提升攻略
    • 1、使用本地离线Gradle压缩包
    • 2、利用本地搭建的maven 仓库
    • 3、利用国内maven仓库镜像地址替代原始仓库

由于种种原因在内地使用jcenter、mavenCentral及google等远程仓库时(毕竟都是国外的服务器),Gradle Sync会很慢,google仓库甚至需要科学上网才能访问,这是造成Gradle 编译的速度缓慢的重要原因之一,当然如果CPU 不给力,编译的项目依赖库关系复杂也是原因之一。

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置。

一、.gradle 、.gradle\caches及 .m2 目录

默认情况Windows 下 .gradle 和 .m2 目录的路径存放在C:\Users\xxxx下,其中**.gradle 作为Gradle的Home 目录存放着所有使用Gradle下载的库文件和jar包**,而**.m2 目录则是存放着本地Maven仓库中下载的库文件**

1 .gradle和.gradle\caches目录

1.1、解析xxx\gradle\wrapper\gradle-wrapper.properties文件下载Gradle

这个properties文件里配置了Gradle :

  • distributionBase——Gradle 的HOME目录
  • distributionPath
  • zipStoreBase——Gradle的缓存HOME目录
  • zipStorePath ——Gradle 的缓存路径
  • distributionUrl——指定Android Studio 加载Gradle 的源地址。
#Sun Apr 26 22:25:12 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

Android Studio 编译时会自动解析xxx\gradle\wrapper\gradle-wrapper.properties文件,并从distributionUrl 节点中拿到Gradle 插件的Uri,如果配置的是http(s),则自动到对应的Uri中下载并缓存到本地的对应的 .gradle目录下,路径Uri里常见的形式有:

  • https://services.gradle.org/distributions/gradle-5.1.1-all.zip 首次从网络链接去下载Gradle
  • http://services.gradle.org/distributions/gradle-5.1.1-all.zip 首次从网络链接去下载Gradle
  • file:/// D://Android//Gradle//gradle-5.1.1-all.zip 从本地对应路径下去获取Gradle

首次使用新版本的Gradle时,无论是本地解压还是网络下载成功之后,都会缓存到.gradle\wrapper\dists下,再次使用相同版本时就会直接先从.gradle\wrapper\dists去加载

注意:Gradle 自身的版本和Android Gradle Tools 插件的版本配对关系。

1.2、解析根Project和Module目录下build.gradle脚本加载第三方库

默认的根Project目录下的build.gradle,有两个作用:下载Google 开发的Android Gradle插件指定Module加载第三库时查找的maven仓库

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
    }
}
//配置给该Project下其他所有Module 引入依赖库时所用的源仓库
allprojects {
    repositories {
        google()
        jcenter()
    }
}

Android Studio 编译时自动解析build.gradle 构建脚本,首先解析Project 根目录下的build.gradle文件,首先是解析buildscript 节点,到repositories 配置的maven 仓库中对应的的路径(由dependencies 节点下的classpath属性)去下载对应的Android gradle插件和第三方的库,以上文件的含义是首先去google这个maven库下去加载“com.android.tools.build:gradle” 版本为3.4.0 的Android Gradle插件,如果google 仓库找不到则继续查找jcenter 仓库,找到则缓存到本地目录下;另外一个allprojects 节点则是对应Moudle目录下需要引入第三方库时候查找的maven库,加载完毕之后也会缓存到.gradle/caches对应目录下

当你在**Module下的build.gradle脚本里

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:'+rootProject.ext.androidxAppcompat
    implementation 'com.alibaba:fastjson:1.1.54.android'
}

引入第三库成功之后就会被缓存到xxx.gradle\caches\modules-2\files-2.1对应目录下:

另外引入成功之后也会在Android Studio 的项目下External Libraries显示。

2、 .m2

.m2 目录则是本地Maven仓库的目录,更多请参见开发 Gradle 插件系列文章。

二、Android Studio 使用Gradle 编译提升攻略

此处的措施不包含通过优化Android Studio 的配置参数进行优化。

1、使用本地离线Gradle压缩包

首先到 Gradle 官网下载对应版本的完整压缩包文件

下载压缩包之后不需要解压直接存放到本地计算机的路径就好,比如存放到计算机下的D:\Android\Gradle\gradle-5.1.1-all.zip(Windows上的路径)配置时需要进行格式转换

...
distributionUrl=file:///D://Android//Gradle//gradle-5.1.1-all.zip

在最新版的Android Studio 3.6.x 时,在Gradle 栏目下有个Gradle 开关,切换为offline模式时,意味着所有库均使用本地缓存模式,若没有缓存会直接报错,而不是所谓的单纯设置Gradle的离线模式,第一次依赖时需要切换为在线模式,否则本地缓存没有,也不能去对应的地址下载,编译时找不到依赖库就会报错。

Android Studio 3.6 的Gradle 开关或许以上理解不够准确,但应该也不会差得太远,仅供参考。

2、利用本地搭建的maven 仓库

可以利用Nexus或者Artifactory 搭建自己的maven仓库,替代原始仓库jcenter()、mavenCentral()及google()等

Artifactory 的详细使用见下文。

buildscript {
    repositories {
         maven{
            url 'http://localhost:8081/artifactory/list/android-basic-group/'
         }
        //如果你本地maven仓库 已经拥有了足够的库,那就不需要额外配置了,因为加载的顺序是从上到下的
        google()
        jcenter()
    }
}
    
allprojects {
    repositories {
         maven{
            url 'http://localhost:8081/artifactory/list/android-basic-group/'
        }
        google()
        jcenter()
    }
}

3、利用国内maven仓库镜像地址替代原始仓库

优先使用本地maven仓库,再使用 阿里云仓库服务 的代理镜像库作为下载源。

buildscript {
    repositories {
        maven{
        	// 替代 google()
            url 'http://maven.aliyun.com/repository/google'
        }
        maven{
        	//替代 jcenter()
            url 'http://maven.aliyun.com/repository/jcenter'
        }
        //替代public 库————jcenter和mavenCentral的聚合仓库
        maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    }
}
allprojects {
    repositories {
        maven{
            url 'http://maven.aliyun.com/repository/google'
        }
        maven{
            url 'http://maven.aliyun.com/repository/jcenter'
        }
        maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    }
}

如果你的本地maven仓库里面保存的库资源不够充分,也可以混合maven仓库镜像库使用。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服