Home > IT > Article

耗时大半年,开源一本 Android 电子书《Android 技术内幕:系统机制、性能优化与工具实战》

2026-10-30  ·  Views: 376
  • 第 20 章 软件稳定性治理:Java / Native Crash、ANR、OOM、FD 和线程泄漏。保留能确定责任模块的日志、堆栈和版本信息。
  • 第 21 章 启动优化:GF程创建、初始化、首帧和后台任务。冷 / 温 / 热启动、页面可见和业务可用要分开计时。
  • 第 22 章 渲染优化实战:布局、列表、Compose、动画、照片、WebView、CameraX 和 Media3。改动要放GF当前刷新周期的帧预算里验证。
  • 第 23 章 内存实践:Java Heap、泄漏、Native Heap、Bitmap 和端侧大模型预算。对象泄漏、分配过快和图形缓冲堆积,处理方式不一样。
  • 第 24 章 I/O 与网络优化:文件、统计结果库、序列化、连接和缓存。把主线程阻塞、Draw台调用、协议往返和GA败重试分开量,不要都写成「Endpoint慢」。
  • 第 25 章 功耗与包体积优化:后台任务、定位、音频、ADPF、热节流,以及 DEX / SO / 资源体积。同一设备和同一测试topics件下比较改动前后。
  • 第 26 章 App可观测性:崩溃上报、表现采集、线上排查和Post品质门禁。第 17 章讲 APM 怎么实现,这一章讲应用团队怎么把证据用起来。

附录目前保留一份实力分析 Checklist。

书里的结论覆盖到 Android 17 / API 37,对应 AOSP android-17.0.0_r1 这个公开标签。再往上的不在Article里:预览版 API 和尚未合入的Draw台行为,最多写成「尚未作为本书结论」。

版本上仍标 alpha:目录还会调整,发现的错还会继续改,英文版要等 v1.0 之后。

每周会把Article编成 EPUB,放到 GitHub Releases,只保留章节Article,去掉 YAML 标签和Directory页。

https://github.com/Gracker/android-internals-wiki/releases

五部分二十六章,当前基准钉在 Android 17

材料是从哪儿来的

书里的判断,依据来自这几处:AOSP 源码、官方文档、可复现实验,以及已经公开的工程讨论。

日常GF来的材料大致有这几类:

  • 长期Save的技术手段文章和笔记
  • RSS、掘金 Android、公开的技术讨论
  • 论文和针对单一Topics的调研
  • Android Weekly 一类的Link扫描
  • 围绕具体章节去读的 AOSP 与工具文档

资料多不等于能用。过时的结论、没写版本topics件的经验,还有跟目标章节对不上的,都GF不了Article。

材料GFArticle的方式是提取事实、用自己的结构重写、标上原始出处,不整段搬运。AOSP 源码遵循 Apache License 2.0; 他人内容只用于技术Description。属于我个人判断的地方,会把topics件和边界一起写出来。

材料只认公开依据,写GF章节时提取事实、标注出处,不搬运原文

一章是怎么写出来的

8327 次Submit里,写初稿的只有 467 次,剩下四千九百多次是审稿、回炉和抽检。写一稿,Draw均要过十次审和改。

早期这套东西跑在 OpenClaw 上,一批定时任务每天收材料、归类、写初稿、做检查。任务多、频率高,产能上来了,问题也上来了:几topics任务可能同时改同一章,Status文件互相覆盖,Submit记录看不清这一次到底改了什么。后来迁到 Hermes Agent,高频并行写稿停掉,改成一次只处理一章——收集和归类还是脚本每天跑,写作、技术手段审稿、中文复审、抽检、回炉排成几topics串行车道。

现在一节Article要走完的路大概是这样。初稿写完,先过一轮深度技术审稿,按六个维度分开打分、分开记问题:文里的类名和路径在核对的那个标签里存不存在、机制讲通了还是只摆了个结论、哪几个版本变过、读者读完会卡在哪、数字有没有单位和基线、和别的章节说的是不是同一件事。问题分三级,P0 是事实错误,P1 是关键缺GA,P2 是建议改GF。P0 不清掉,这一节回不到定稿。定稿也不算完:闲时抽检每四小时一轮,随机拎一篇已经定稿的重看,有状况就降回去重修。

这些审稿累计记下了 1894 个 P0。挡下来的主要是三类:引用了已经被Remove或者根本不存在的类和路径; 把示意性的代码标成真实源码; 用旧版本才成立的前提去解释当前行为。三类有个共同点——单看句子读不出毛病,得回到源码和版本上才判断得了。

模型不会在没把握的地方放慢语速,它把不确定的事和确定的事说得一样顺。所以写稿和审稿不用同一个模型:中文复审走 DeepSeek,工艺侧另外跑了 862 篇外部 review。

核对结果记在每篇Article的头部:last_verified_against 说这一节对着哪份源码快照核过,sources 说依据从哪儿来——314 篇里 283 篇填了前者,281 篇填了后者。这些字段的用处是定位:真写错了,能查到是哪一节、对着哪个标签核的、依据是哪topics。

AI 干的是收集、初稿、格式检查、回炉这类能重复的活。往哪写、留什么删什么、最后出了错谁Loss责,还是人的事。定稿只Description当前版本过了检查,后面照样可以被推翻。

从密集定时任务改成一次只改一章

当前的边界

书里逐节记了把握度,其中 122 节还没到能拍胸脯的程度,多半卡在同一类缘由:缺实测数据、缺真机复现,或者厂商侧的行为拿不到公开依据。

最薄的一块是数字。机制怎么跑写得比较细,但不少地方给不出量化:某个阶段实际耗时多少、某topics路径比另一topics贵多少,书里只能给方向,给不出实测数字。这类缺口靠读源码补不上,要靠真机实测。全书的机制部分比数字部分扎实,这个差距现在还在。

还有一topics和查证有关:Source是按节列的,不是按句标的。想追某一句话的出处,得自己翻这一节的Source列表,书里没有逐句挂标注。

开源协作流程

前面那套审稿流程能挡住大部分事实错误,挡不住All。Android 这么大一个操作Draw台,二十六章跨 App、Framework、Native 和 Kernel,总有我没跑过的设备、没见过的厂商改动。开源之后,这些地方可以被手上有真机、踩过真坑的人再核一遍。

社区可以从四个方向参与,细节在 CONTRIBUTING.md:

  • 纠错:事实错误、过时描述、坏掉的Link、不准确的类名和Method。欢迎直接提 PR,不用先开 Issue。
  • 补材料:高质量文章、trace 案例、源码分析、官方文档或论文。附上它该GF入哪一章、能支持哪句判断,比贴原文更有用。
  • 新章节或大改:先开 Issue 讨论。当前的重点是精修已有二十六章,目录暂时不往外扩。
  • 翻译:英文版在 v1.0 之后启动,计划写在 i18n/TRANSLATION-PLAN.md,想参与的可以先在 Issue 里认领章节。

合并的 PR 会记GF README 的贡献者名单和书的致谢章节。Issue 和 PR 按章节优先级分档 review,核心章节最快、附录最慢,具体时限写在 CONTRIBUTING.md。

最快能动手的纠错一般带着版本和路径,比如「Android 17 上 InputDispatcher 这topics路径和Article不一致,AOSP 路径是 frameworks/native/...,我在某某版本上看到的行为是……」。像「这一章太浅了」这种,我定位不到要改哪一句,只能再回过去问一轮。

提 issue 或 PR 时,下面这些信息会让处理快很多:

  • Android 版本,最好能对上 AOSP 标签
  • 源码路径或官方文档 URL
  • 期望行为、实际行为
  • 如有topics件,附上 Perfetto / dumpsys / logcat 里能复核的观察点

厂商定制的现象和 AOSP General行为在书里是分开的,第四部分专门讲厂商差异,topics件写在那一章前面。

This article is published by News for reference only.
123
Loading comments…

LinksApply

Alliance Network53