Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52722 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

26 | 关于编译,你需要了解什么?

Code Review
第三方代码检查
自定义代码检查
ReDex
R8
d8
ProGuard
其他优化建议
Instant Run的问题
Gradle的官方方案
安装时间
编译时间
极致的性能追求
代码组织管理架构
统一编译工具
编译构建流程
代码优化
语义检查
语法分析
词法分析
将高级语言转化为机器或虚拟机所能识别的低级语言的过程
课后作业
总结
持续交付
代码优化
编译速度
Android编译的基础知识
编译的过程
编译的定义
关于编译

该思维导图由 AI 生成,仅供参考

作为 Android 工程师,我们每天都会经历无数次编译;而对于大型项目来说,每次编译就意味着要花去一杯咖啡的时间。可能我讲具体的数字你会更有体会,当时我在微信时,全量编译 Debug 包需要 5 分钟,而编译 Release 包更是要超过 15 分钟。
如果每次编译可以减少 1 分钟,对微信整个 Android 团队来说就可以节约 1200 分钟(团队 40 人 × 每天编译 30 次 × 1 分钟)。所以说优化编译速度,对于提升整个团队的开发效率是非常重要的。
那应该怎么样优化编译速度呢?微信、Google、Facebook 等国内外大厂都做了哪些努力呢?除了编译速度之外,关于编译你还需要了解哪些知识呢?

关于编译

虽然我们每天都在编译,那到底什么是编译呢?
你可以把编译简单理解为,将高级语言转化为机器或者虚拟机所能识别的低级语言的过程。对于 Android 来说,这个过程就是把 Java 或者 Kotlin 转变为 Android 虚拟机运行的Dalvik 字节码的过程。
编译的整个过程会涉及词法分析、语法分析 、语义检查和代码优化等步骤。对于底层编译原理感兴趣的同学,你可以挑战一下编译原理的三大经典巨作:龙书、虎书、鲸鱼书
但今天我们的重点不是底层的编译原理,而是希望一起讨论 Android 编译需要解决的问题是什么,目前又遇到了哪些挑战,以及国内外大厂又给出了什么样的解决方案。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Android工程师日常必备技能——编译对团队开发效率的重要性,以及优化编译速度的必要性。通过微信团队的实际案例,强调了每次编译节约1分钟对整个团队的时间节省是巨大的。同时,还介绍了国内外大厂在编译速度优化方面的努力,如微信、Google、Facebook等。文章还提到了编译速度之外,读者还需要了解的编译相关知识,包括编译构建流程、统一编译工具、代码组织管理架构等。此外,还详细讨论了编译速度的重要性,以及针对编译速度优化的建议,如更换编译机器、使用Build Cache、升级Gradle和SDK Build Tools等。总体而言,本文为Android工程师提供了关于编译速度优化的全面指南,帮助他们提高团队开发效率。文章还介绍了一些优化工具,如AAPT2、d8、R8和ReDex,以及它们的作用和优势。通过本文,读者可以快速了解编译对团队开发效率的影响,以及如何优化编译速度的重要性,同时也可以了解到国内外大厂在这方面的努力和相关知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • Mograine
    微信这么大的一个app,android才40人?

    作者回复: 兵不在多

    2019-02-19
    2
    18
  • 汪海游龙
    对编译有了更深的认识,另外,Gradle 官方有个 build-scan 的功能,可以生成构建期间的详细报告,其中有性能相关的统计,可以帮助分析一些耗时的 task 等。

    作者回复: 是的,profile也是可以的

    2019-02-20
    8
  • 饮识止渴(Vilin)
    odex文件,oat文件什么区别?是同时存在的吗?

    作者回复: 是同一个东西,oat文件,它的格式是.odex

    2019-03-17
    3
  • zp
    看到有用到热修复的方法,这个基于插件化技术的方式在安卓9.0以后就用不了吧,这个怎么解决呢?

    作者回复: 并没有用不了吧

    2019-05-20
    2
  • Victory
    以前用的windows 每次编译基本要两分钟了,特别影响开发效率,现在换的mac,比以前快了,但还是觉得慢😊

    作者回复: 这就需要我们尝试去优化了

    2019-03-19
  • splm
    1.为什么把常量替换成方法对于大项目不行?是因为方法数吗? 2.对于annotation processor出现全量更新问题,gradle4.7的文档该如何解读?

    作者回复: 1. 因为代码太多太乱,而且很多都是历史代码 2.可以去看看官方文章以及提交的代码

    2019-02-26
  • xlogic
    请问作者有没有了解过 JRebel for Android,虽然现在下线了,但是去年我用的时候感觉热部署很快,不知道是啥原理?

    作者回复: 记得应该是类似热修复的原理,之前有专门研究过

    2019-02-19
  • 项目大了之后,一直受编译速度的折磨,即使换了机器,依旧还是那么慢,真的很恼火。google flutter的秒级编译速度刚开始确实让我眼前一亮,只可惜用flutter写的代码太难看了,不知道业界有什么办法能让flutter代码更加简洁一些呢?

    作者回复: 只要Flutter开发者的盘子够大,后面的很多配套项目都会成熟起来

    2019-02-19
    2
  • Innocence
    编译原理的三大经典巨作:龙书、虎书、鲸鱼书, 这个链接访问不到了
    2021-05-13
    1
    4
  • 程序员小跃
    其实做人、做事也是如此,我们经常会陷入局部最优解的困局,或者走进“思维怪圈”,这时如果能跳出路径依赖,从更高的维度重新思考、审视全局,得到的体会可能会完全不一样。----最近在搞Java的微服务,很多问题一直困扰,我就出去走走,休息下,然后回去尝试从其他路径解决,效果真的还行
    2019-06-15
    4
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部