新书上架!《Android 构建与架构实战》系统学习 Gradle 与 AGP。

2023/05/14

Android 开发经过十多年的技术演进,如今 Gradle 对于开发者,已是必备工具。一个企业级的 Android 项目,仅使用 Android Studio 项目里的默认配置,不通过 Gradle 定制编译测试流程、不与 Android Gradle Plugin(下文简称 AGP)深度交互,几乎是不可能的。常见的基础应用场景,例如多渠道打包分发、自动化多语言包下载,APK、AAR、AAB 上传与发布等等,是不少团队会面临的问题。

上述问题我搜索、复制、粘贴,一气呵成,感觉不需要深入学习呀?

的确,不少人对于 Gradle 在 Android 开发中的印象如上所述,公司里讨论 Gradle 的人好像都是高级工程师或架构负责人。这其中可能的原因是:因为大部分人都没有“真正”学过,所以在碰到一些场景时你并不会想到“我需要它”。举一个夸张的例子,例如:没人会招聘“能使用喷气飞行器(Jetpack)”的高工作业工人,对吧?但如果真的有低成本又安全的喷气飞行器出现了,你觉得老板会说“不,我们不需要这样的技能、工具”吗?

Gradle 作为一个平台型工具,背后关联的知识体系复杂、学习曲线陡峭,涉及到多门语言(Groovy、Java、Kotlin)、Maven 仓库与依赖、Android Build Tools(例如 AAPT、Kotlin Compiler、D8/R8 等)、资源/源码/字节码等文件、格式的解析与流程扩展(例如 KSP/ASM),以及最终的插件开发(例如 Gradle 和 AGP 的 API)等等。在实际工程中,这类问题多数是由公司的个别高级工程师或基础架构团队负责,因此网上的讨论度并不高,一些有价值的场景和话题也就难以大面积暴露。

实际上,Android 开发者掌握 Gradle 及关联技术对于工作的帮助是多方面的。当你把这个技能运用在团队合作,通过对基础架构和 CI/CD 的贡献,会发现大家对你的依赖逐步加重;当把知识技能写在简历上,可以反应个人高水平的工程能力,也拓宽回答问题的思路,为整个面试加分添彩。进一步说,越大的团队对于 Gradle 就有越强的需求,不管是考虑到公司的成长、团队的扩张,抑或面试大公司时,构建与架构的能力都是查缺补漏的关键一环。

本书特色

那...这些我都不懂呀,一直看大家说 Gradle 难,网上也没有系统性的资料,该怎么学?

这便是本书编写的目的所在:本书瞄准的人群,不仅仅是国内外各 Android 团队的高级工程师或架构负责人,还包括有志成为这样角色的人。市面上不乏讲解 Gradle 的书籍,但均使用 Groovy 且已年久失修,不利于快速上手。进一步地,若要涉及到 Android 构建流程(AGP)和对应的架构实战资料,更是寥寥无几,无法满足系统性学习的需求。

本书采用 Kotlin 编写,基于最新的 Gradle 7 和 AGP 7(含部分 AGP 8 前瞻)。它不局限于 build.gradle(.kts) 的脚本配置,而是引入大量 Gradle 的进阶内容为铺垫,超过 40 个自定义的生态协同插件为载体,带你探讨新版 AGP 的接口与原理,思考如何在 AGP 相对闭环的容器中定制项目所需的构建流程。

通过这些内容,你对于 Gradle、AGP 的理解,以及插件编写的技术可提高数个层级,如下问题便能轻松解决了:

  1. Android App 的构建流程涉及哪些关键步骤?我们写的插件通常与哪些组件交互?
  2. 如何快速入门 Gradle 插件编写?插件怎么样与 Android 开发环境相兼容?如何保持长期可测试、可维护性?
  3. 为什么 Gradle/AGP API 经常变化,特别是迁移到最新 Gradle/AGP 7.x 的大量底层 API 变化?哪些是该重点掌握的?
  4. Gradle 的文档太浅显,外部的开源插件项目又存在很多没见过的 API ?大部分数据类型、文件类型和 JDK 常用的完全不一样,怎么转换?

在此基础上,后期我们还设定了一系列的架构实践章节,涵盖资源任务扩展、Kotlin 源码任务扩展、JVM 字节码任务扩展、构建优化技巧等多个部分,巩固对 Android App 构建与架构的认知。我们将引导你从 App 基础架构设计的角度深入思考更多问题:

  1. 为什么说自动化打包、上传、测试只是 Gradle 关联应用场景的冰山一角?
  2. 如何调试 Gradle、AGP、AAPT2、注解处理器、R8/D8 等等工具的源码?从源码中我们又能发现哪些核心设计,从而做到以不变应万变?
  3. 日常开发工作中,有什么工作可以被沉淀成基础设施,提高团队效能?例如 BundleTool 作为一个很基础的工具,否能利用 Gradle 自动化其流程?
  4. KSP 是注解处理器吗?KSP 能否处理多模块的源码?Kotlin/Java 的源码还有什么可以扩展的应用场景?
  5. 字节码修改是不是银弹?组件化路由表的生成如何实现?从架构设计的角度如何字节码修改 API 的升级迭代?
  6. 构建增速的核心要点是什么?如何在茫茫的构建日志中分析出瓶颈?如何结合 Android 的 Variant 区别开关不同的插件?

通过系统性地学习 Gradle 与 AGP 的高级应用,你将筑起厚实的技术壁垒,包括 Gradle 技术与 Android 构建的理解已能超过大多数的 Android 开发者。 倘若成为该领域的专家需要 10 分的知识储备(例如 Gradle Fellowship 的官方认证专家),完整消化本书能帮你达到 7-8 分。

本书目录

按照传统 A5 大小的纸书估算,本书有近 700 页的容量,是市面上一般技术图书的 2 倍。本书所配套的材料,包括示例源码、参考资料均以开源至我的 Github 仓库

(篇幅所限此处仅展示了 2 级目录,完整的 3 级目录参见资料仓库)。

第一章 环境与概念

  • 1.1 开篇介绍
  • 1.2 Android App 构建与架构
  • 1.3 构建工具发展历史
  • 1.4 手动构建一个 App
  • 1.5 Run 按钮背后

第二章 快速上手

  • 2.1 Gradle 项目的工程结构
  • 2.2 Gradle 生命周期基础梳理
  • 2.3 Kotlin 和 Gradle Kotlin DSL
  • 2.4 第一个插件:发送构建通知到 Slack
  • 2.5 Gradle 插件分类
  • 2.6 Gradle 任务基础梳理
  • 2.7 源码与调试

第三章 扩展 Android 构建流程

  • 3.1 变体(Variant)
  • 3.2 Variant & Artifact API v1
  • 3.3 Variant & Artifact API v2
  • 3.4 溯源 AGP 入口流程
  • 3.5 溯源 Artifact API
  • 3.6 创建自己的 Artifact 集合 - Polyfill 工具库

第四章 深入 Gradle 原生 API

  • 4.1 生命周期的钩子(Hook)
  • 4.2 插件扩展的属性/任务的属性
  • 4.3 DSL 嵌套
  • 4.4 任务编排
  • 4.5 缓存与增量机制
  • 4.6 插件测试

第五章 资源构建扩展

  • 5.1 AGP 资源交互 API 的进阶使用
  • 5.2 深入资源编译与打包
  • 5.3 架构应用:为启动图标加上蒙层 - ScratchPaper 插件
  • 5.4 架构应用:自动化 BundleTool 转换流程 - BundleTool 插件

第六章 代码构建扩展之 Kotlin 源码

  • 6.1 AGP 源码交互 API 进阶使用
  • 6.2 Kotlin Symbol Processing (KSP)
  • 6.3 架构应用:源码阶段的路由表生成 - Koncat 插件

第七章 代码构建扩展之 JVM 字节码

  • 7.1 字节码简介
  • 7.2 AGP 7.0 之前的字节码修改 API:Transform API
  • 7.3 AGP 7.0(含)之后的字节码修改 API:Artifacts API
  • 7.4 AGP 7.0(含)之后的字节码修改 API:Instrumentation API
  • 7.5 架构应用:敏感 API 调用的监控与代理 - Caliper 插件

第八章 提升构建体验

  • 8.1 构建分析
  • 8.2 构建提速技巧
  • 8.3 根据 Variant 决定是否启用插件

如何购买

本书目前上架了电子版:定价 ¥499,点击链接或扫描下面二维码购买,进入后请点击“专栏”阅读(推荐使用网页版获得最佳阅读体验)。

为了对等待本书的朋友表示感谢,即日起只要关注Android高效开发公众号,回复“Android 构建与架构实战”即可领取高达 150 元的早鸟优惠券。首批 150 元优惠券为 50 张,领完后我会再更新 50 张 100 元,然后再 50 张 50 元,最后恢复原价。(活动最终解释权归本人所有)

既然选择知识星球作为专栏输出,我就打算再送一些额外福利给大家,目前星球计划的主营内容:

  • 《Android 构建与架构实战》电子专栏:可能是市面上独一份(统计包括中英文)、系统性学习 Gradle 和 AGP 实战的书籍。随着 Android 的发展,封禁的系统 API 越来越多,Runtime 的黑科技已经越来越没有发挥空间,编译构建的工具却热度不减。
  • 新知预告,不仅是英文社区的一手 Android 架构方面资料,还包括作为 GDE 参与到各个会议、与行业专家交流等了解到的前沿资讯。
  • 会员播客:包括软技能分享、行业观察、职场思考、海外的互联网公司发展等。
  • 会员问答:技术问题包括 AGP、Gradle、Android 架构、Kotlin 编译器等我和嘉宾探索的领域,均可提供一定的帮助;软实力和职业发展方向的问题亦可提供指引。此外,读者终于拥有一个便捷的可直接与书籍作者交流的平台,你可学习的过程中于任意小节留下评论,写下你的疑惑。

本书于编写尾期进行了第一轮校对,几位一线的 Android 基础架构工程师提出了数十个宝贵的修改建议。目前正在进行的第二轮校对中,我邀请了十多位 Android 各垂直领域的专家。他们将提供更加全面的审阅视角,而校对的评论将公开于星球当中,因为我相信这些高水平的思想碰撞亦是富有价值的学习材料。

关于作者

我是 AB,常用 ID 为 2BAB。Android 开发者、开源贡献者、技术书籍《KOGE》和《Android 构建与架构实战》作者,以及《二分电台》播客主理人。

于 2013 年开始接触 Android 与 Gradle 相关开发,活跃于 Android 技术社区,创作包括文章、书籍、演讲、播客等形式,乐于交流、与他人碰撞思想。曾在阿里巴巴等国际公司就职,主要从事移动基础架构研发。同时,我是中国大陆八位 Android GDE(Google 开发者专家)之一。

你可以在我的博客主页找到全部的作品。https://2bab.me/zh/

为什么使用 Kotlin 编写?

Kotlin DSL 现在成为新 Gradle 构建的默认设置。Gradle Kotlin DSL 带来的好处有:

  1. 编译时检查。
  2. 更好的 IDE 体验,包括自动补全,源代码导航,重构等。
  3. 简化的声明式插件语法。
  4. 丰富的 Kotlin 社区支持。

尤其第二点,“自动补全”是过去使用 Groovy DSL 编写 Gradle 脚本的一大痛点,而现在 Kotlin 为我们解决了这个问题。而作为 Android 开发者,一门语言带来的统一体验(App 主体开发和构建工具开发)亦是令人欣喜。

和《KOGE》小册的关系?

很多人应该看到了最近 Kotlin 官方和 Gradle 官方在转发我的另外一本开源小册 《KOGE》和《Android 构建与架构实战》又有哪些不同?

  • 《KOGE》小册是一道开胃小菜,它面向 Android 和 Gradle 的新手,搞懂脚本的配置与简单的自定义任务,大多数内容均为互联网上的公开文章和资料——而遍数全网,Gradle 与 AGP 的内容多数能找到仅为入门的内容。
  • 《Android 构建与架构实战》是一桌宴席,它面向想要成为高级工程师甚至架构工程师的人,不再局限于一般的脚本配置与小修小补,而是真枪实弹地编写 Gradle 插件(大小共 40+ 个案例),实战编译构建方向的架构设计,结合 Android 领域的特定场景去理解 AGP 的最佳实践等。

同样是使用 Kotlin 作为 Gradle 脚本/插件的编写语言,《KOGE》完美地成为了本书的前置课程——事实上《KOGE》便是本书在写作过程中产生的想法:如果能把基础概念都归纳到一本小册子,《Android 构建与架构实战》就能更流畅地专注在插件编写、AGP、架构、最佳实践等进阶命题。

借用前文的比喻,倘若成为该领域的专家需要 10 分的知识储备,《KOGE》能做到 2 分,而完整消化本书能帮你提升至 7-8 分。

欢迎关注我的 Github / 公众号 / 播客 / Twitter


评论和交流请发送邮件到 [email protected]

Wechat Donate QACode
通过微信扫描赞赏码赞助此文