Android Studio最全面编译构建优化!!!

本文详细介绍了如何优化Android Studio的编译速度,包括初始化、配置和执行阶段的优化方案,如开启并行编译、增大编译内存、启用构建缓存、按需构建等。通过一系列调整,显著减少了rebuild全工程、新增方法和修改XML的编译时间,提升开发效率。
摘要由CSDN通过智能技术生成

汇总:Android小白成长之路_知识体系汇总【持续更新中…】

问题背景

公司项目使用Android Studio以及Gradle进行编译,在每次修改代码(哪怕是一行修改),再次编译运行都要耗时三四分钟,甚至更长时间。在初次编译时更是长达十几分钟、极大的影响了开发效率。俗话说工欲善其事,必先利其器。这就对编译速度进行一波优化,让我们一步一步开始吧!

Gradle构建流程

首先了解一下Gradle的构建流程,整体分为三个阶段:

  • 初始化阶段:Gradle支持单项目和多项目构建,在初始化阶段,Gradle从setting.gradle中读取需要参与构建的模块,并为每个模块创建一个Project实例。
  • 配置阶段:配置项目模块和其所需要执行的脚本,也就是build.gradle等文件
  • 执行阶段:开始执行配置后的脚本任务

大体上了解了这些流程,我们就可以从这些流程上入手进行优化

优化前相关说明

当前作为验证的电脑相关信息:

  • 电脑名称:MacBook Pro
  • 系统:Mac
  • 内存:8GB 1867MHz DDR3
  • 处理器:双核Intel Core i5 2.7GHz
  • AS版本:4.1.1

验证编译速度的三个角度:

  • rebuild全工程,全部编译
  • 新增一个方法,触发java重新编译
  • 修改一个xml,触发资源重新编译

比较数据获取方式:rebuild尝试三次取最低值,修改方法或xml尝试五次取最低值

相关说明:

  • 由于电脑有时候卡顿或者别的原因影响编译,会使得某次编译耗时很长,因此不能取平均值作为参考
  • 编译一般会一次比一次快,因为Android studio自带缓存
  • 开发阶段本身就不会一直改配置,因此取最小值基本可以模拟日常使用情况
  • 因为主工程模块比较庞大,因此验证时使用的是主工程模块的代码,如果修改的是组件代码,用时一般会更少
  • 每一次数据统计使用的方案继承了它前面所有的优化方案
  • 修改方法和xml用apply changes

优化方案

从整体构建流程可以得知,我们整体上需要从三个方面进行优化:

  • 初始化速度优化
  • 配置速度优化
  • 执行速度优化

其中执行的过程占比是最大的,所以重心放在执行速度优化上

初始化速度优化

一般初始化过程任务较少本身就已经很快了,但仍然可以做一些处理,以达到最佳状态:

  • 当组件化程度较高时,在开发某个特定功能过程中有些组件是不需要引入的,此时可以在setting.gradle中移除不需要引入的组件模块,可以减少初始化时间
  • setting.gradle中include之前尽量不写过多代码

配置速度优化

配置阶段主要是对各个build.gradle进行解析,因此可以注意以下几点:

  • 按需引入模块,减少build.gradle的解析
  • build.gradle中尽量少做耗时操作,例如读取系统时间动态配置apk的名称组成
  • 在开发阶段不是必要执行的任务,可以写判断避免这些任务的配置,例如一些字节码插桩,性能监控之类的

执行速度优化

此阶段存在的大量的任务需要执行,因此优化的点也非常的多

对Gradle进行配置

开启并行编译

开启后会并行执行多个任务,大幅度减少编译时间,只需要在gradle.properties中添加:

org.gradle.parallel=true
增大编译内存

由于大家的电脑配置都不一样,因此具体设置多大内存需要根据个人情况进行合理配置,一般在gradle.properties里已经有相关配置,可以对该配置进行修改,例如

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

同时在主工程模块的build.gradle中进行修改:

dexOptions {
   
	javaMaxHeapSize "4g"
	}

值得注意的是,javaMaxHeapSize的值需要比org.gradle.jvmargs设置的值少512m以上,而且org.gradle.jvmargs的值并不是设置越高越好,根据验证,最好配置为系统内存的1/3,最多不要超过1/2。在部分文档中显示,高版本中javaMaxHeapSize中不再需要配置javaMaxHeapSize,只需要配置org.gradle.jvmargs即可,查阅了许多资料都没说清楚,所以暂时都配置好了

开启按需构建

对没有更改的模块不再进行编译,非常适合已经组件化的项目,在gradle.properties中添加:

org.gradle.configureondemand=true
开启构建缓存

直接使用之前生成的缓存,不再进行构建,在构建时任务后面会显示FROM CACHE,在gradle.properties中添加:

org.gradle.caching=true
开启增量注解编译

支持注解增量编译,不会重新触发编译(gradle高版本中需要移除),在gradle.properties中添加:

android.enableSeparateAnnotationProcessing=true

数据对比(并行编译是优化前已经开启,因此以下时间不包括并行编译的优化):

rebuild 修改方法 修改xml
配置优化前 4m46s 46s 22s
配置优化后 2m39s 42s 20s
收益 减少44% 减少8% 减少9%

对AS进行配置

开启离线模式

开启离线模式后不会再开始的时候去检测依赖是否有更新,也不会去下载相关更新的依赖,首次构建不能开启,否则无法完成构建,后续构建可以开启,在某些情况下将大幅度改善编译速度,强烈推荐开发阶段使用。点击下图中的图标的按钮即可开启离线模式,有些版本显示为类似wifi的图标,再次点击取消离线模式:

在这里插入图片描述

更改AS内存大小

点击AS的Help菜单项,选中Change Memory Settings选项。如图:

在这里插入图片描述

弹出如下图弹框,把Maxinum Heap Size 修改为合适值,具体修改值根据自身电脑内存配置选择

在这里插入图片描述

数据对比:

rebuild 修改方法 修改xml
AS配置修改前 2m39s 42s 20s
AS配置修改后 2m16s 37s 16s
收益 减少14% 减少11% 减少20%

更新最新Gradle版本

由于gradle在新版本中一般都会对构建速度进行进一步的优化,因此保持最新的gradle版本可以获得最佳的构建体验,更新方式如下:

  • 首先在gradle-wrapper.properties中进行gradle版本的配置:

    distributionUrl=https\:``//services.gradle.org/distributions/gradle-6.7.1-all.zip
    
  • 然后在根目录下的build.gradle中更新gradle插件版本:

    classpath 'com.android.tools.build:gradle:4.1.1'
    

更新到6.x以上可能出现的问题和解决方案:

  1. 报异常:

    FAILURE: Build failed with an exception.
    * What went wrong:
    A problem occurred configuring project ':live'.
    > Failed to notify project evaluation listener.
       > org.gradle.api.tasks.TaskInputs.property(Ljava/lang/String;Ljava/lang/Object;)
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Android Studio 提供了一些内置的优化和配置选项,可以帮助你加速编译过程。以下是一些常见的加速编译的方法: 1. **构建缓存**:启用Gradle构建缓存可以重用编译过程中产生的文件,下次构建时会更快。在File > Settings (Windows/Linux) 或 Android > Build, Execution, Deployment > Compiler > Build Cache 中可以设置。 2. **分模块构建**:如果你的项目很大,将它拆分为多个模块可以减少一次性编译的工作量。每个模块有自己的编译依赖。 3. **并行编译**:Android Studio允许你开启并行构建,这会利用多核处理器同时编译不同部分。在File > Settings (Windows/Linux) 或 Android > Build, Execution, Deployment > Compiler > Build Process > Gradle选项中可以调整。 4. **减少依赖**:精简项目的依赖列表,移除不必要的库和插件,可以降低编译时间。 5. **启用Proguard**:虽然这会影响代码大小和性能,但在生产环境中启用Proguard(或R8)可以减小程序并去除未使用的代码,从而加快运行时加载速度。 6. **使用预构建库**:对于常用库,考虑使用预构建的AAR或JAR文件,它们通常比从源码编译速度快。 7. **检查并修复错误**:避免编译错误,及时修复警告,因为错误会打断编译流程。 8. **更新工具和SDK版本**:确保使用的Android Studio和相关工具库都是最新版,有时新的版本可能会引入性能提升。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nbin_Newby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值