美图Android编译速度优化实践指南

分享嘉宾:张仙华 美图 资深开发工程师

分享嘉宾:张仙华,美图秀秀android团队资深研发工程师,负责编译加速、性能优化、架构设计等公共基础相关工作

导读:本文的主题是美图秀秀的Android编译速度实践指南,通过对本文整体方案的演进的阅读,读者也可以把方案快速落地到自己公司的产品中;首先会和大家介绍一下做编译加速优化的背景,以及我们在做优化过程中,每一期是如何演进升级的,以及我们最终在开发上形成的约束和规范,最终谈一谈未来那些方向我们可以继续深挖,保持持续更新和迭代。

01

背景介绍

由于美图秀秀Android 工程庞大,优化前全量编译 8m45.2s、增量编译2m35.8s,造成在开发期间研发同学需长时间等待编译构建完成,严重影响研发效率,因此针对工程进行编译优化势在必行。

目前优化后全量编译(耗时 1m49.8s、降幅达 79.1%),增量编译(耗时 40.6s、降幅达 73.9%)。

10a4fd695adcf799f083ce6e952002c6.png

编译加速优化1期包含jvm优化、aspectjx和firebase任务屏蔽、res精简,编译加速优化2期包含AGP升级和模块aar发布;编译加速优化3期包含动态版本依赖、自动发布以及模块安全隔离;编译加速优化4期包含静态版本、动态计算、依赖查询和配置切换自动化;通过上述1-4期优化,我们可以做到和日常开发流程一样,不用关注各种模块版本号、源码和aar之类,全局自动检测和适配。该方案已经在美图公司多数产品线Android 项目上落地,为此希望借此机会,和各位交流美图秀秀Android的整体编译优化方案。

02

优化演进

1. 编译优化第1期

93b5c2bdff1d0b574d874b1d0987cf25.png

编译优化第1期通过屏蔽aspectjx、lint、测试相关任务、jvm内存优化、resConfigs精减等手段,增量编译整体耗时降低22.4%,但整体降幅有限,因此也为我们后续做二期优化埋下伏笔。

(1)Task任务分析

d26d03264f1fbe4c0c529d90f52b268b.png

通过上述任务数据截图,我们知道类似aspectjx等transforms任务是相对比较耗时,达30s+,因此自然我们可以在本地开发环境下针对类似的任务进行屏蔽,从而降低编译耗时。

(2)jvm优化

9b4ebff3e5f02b2711ccecfccd377bcc.png

根据官方的描述,我们使用并行垃圾回收期要比G1垃圾回收器性能更高,所以可以-XX:+UseParallelGC把这块配置加速。

ff1f09f21a7f6b5350916a14c42587a2.png

在我们电脑设备硬件条件允许下,可以适当增加包括dexOptions中maxProcessCount以及线程数、jvm内存等。

2. 编译优化第2期

ae834e51a90479ad09061bd998cfa5cc.png

编译优化第2期通过把工程中所有子模块发布仓库后进行外部依赖及升级AGP至4.0.2版本等手段,增量编译速度从2m35.8s降低至40.6s,降幅达73.9%,全量编译速度从8m45.2s降低至1m49.8s,降幅达79.1%,优化效果十分明显,但由于每次都要改版本号,操作比较繁琐,因此我们在编译优化三期对应做了升级和调整。

(1)模块内部依赖和外部依赖对比

// 内部依赖方式
implementation project(':app:base')
// 外部依赖方式
implementation "com.x
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值