不知道你有没有发现每次运行项目的时候build时间都格外长,浪费了很多时间?如果你是为了解决这样的问题,那么该篇应该蛮适合你~
Gradle 相关
- Android Gradle - Gradle、Gradle plugin 基础认知
- Android Gradle - AndroidStudio 中 Gradle 依赖全解
- Android Gradle - 全面加速 Gradle Build 编译
- Android Gradle - Gradle常见异常
提示:不论以何种方式优化编译速度,都需要我们重启As才会生效
AndroidStudio 内置操作
提示:配或不配均可,因为后续我们会统一进行配置
查看执行内存、分配内存
放大图(方便查看)
如无法查看,请根据下图进行设置
Gradle 提速方式
关于Gradle的提速方式可能有很多,但是在我目前已有的认知中主要有提升As内存分配、配置Gradle熟悉、使用Gradle离线缓存、采用国内镜像下载方面
As内存分配
内配分配的大小取决于你电脑配置,一般的电脑配置都可以进行如下设置
步骤:
- 修改
AndroidStudio
的内存分配
- 修改
studio64.exe.vmoptions
文件内数据(友情提示:可重命名文件后缀以满足修改需要,改完之后记得改回来!)
-Xms1024m //JVM启动的起始堆内存
-Xmx4096m //AndroidStudio能使用的最大heap内存
-XX:MaxPermSize=1024m //最大的Permanent generation大小。存放的事类本身(不是对象),以及方法,一些固定的字符串等等。
-XX:ReservedCodeCacheSize=512m //设置JIT java compiler在compile的时候的最大代码缓存
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=300
此为修改后的参数图
修改后的参数代码
-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=1024m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djna.nosys=true
-Djna.boot.library.path=
-da
可能遇到的问题
注意事项 - 如按照上图修改且重启As之后编译速度没有改善,那么请按照下图看是否进行如此操作!
主要目的是查看你是否下载过多个版本的 AndroidStudio,导致配置和运行的不统一,从而导致看起来的设置失败~
- 用户目录,查看对应版本的As
- 查看是否有此文件,如有则修改~
Gradle配置
小课堂:gradle.properties中允许我们进行各种配置, 具体配置需要针对自身进行选择,随意配置大内存可能会出现oom
,以下是一些常见的配置设置 ~
功能 | 设置 |
---|---|
配置内存 | org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 |
守护进程 | org.gradle.daemon=true |
并行编译 | org.gradle.parallel=true |
开启缓存 | android.enableBuildCache=true |
开启孵化模 | org.gradle.configureondemand=true |
gradle.properties
加入配置
org.gradle.parallel=true
org.gradle.daemon=true
如图所示
离线编译
注意:离线编译的使用建立在你当前没有新的依赖,如果你项目属于开发的繁忙阶段,个人不建议进行此项设置!!!
如果项目相对平稳,没有新的三方库需要引用,那么可以用离线编译 这种优化方式去提升编译速度
Stttings - Gradle
进行设置
国内镜像
关于国内镜像的配置,我觉得每个项目中应该都有,这个主要作用在我们编辑项目时下载远端资源太慢的场景,关于镜像的使用借鉴了此处~
使用国内阿里云镜像
依赖包下载地址替换为Google
依赖包下载地址,可以提高非Offline模式下快速下载项目依赖的包
,使得编译项目达到秒级
示例图
build.gradle(Project)
repositories
加入以下Code
//阿里云地址
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
allprojects
加入以下Code
//阿里云地址
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url "https://jitpack.io" }