WebSettings 的缓存模式,H5 混合应用的加载策略 WebSettings 的缓存模式,H5 混合应用的加载策略 WebSettings 的缓存模式,H5 混合应用的加载策略 去年维护一个存量混合应用时,遇到一个让我困惑了很久的问题:同样的 H5 页面,在 iOS 上二次打开几乎是瞬时的,Android 上却总是要从头加载。排查了一圈 CDN、HTT 2026-06-21 Android 5
SVG 转 Vector Drawable 的注意事项 SVG 转 Vector Drawable 的注意事项 SVG 转 Vector Drawable 的注意事项 Android 开发里用 Vector Drawable 替代多套 PNG 已经是老生常谈了,但真把设计师给的 SVG 往项目里一丢,编译报错、运行时崩溃、渲染错位的问题从来没少过。这篇文 2026-06-21 tool 1
开源项目被大厂收购后的结局,你的依赖库还在吗 开源项目被大厂收购后的结局,你的依赖库还在吗 开源项目被大厂收购后的结局,你的依赖库还在吗 从 Square 的 LeakCanary 说起 Square 这家公司对 Android 生态的贡献,老一点的开发者应该都有印象。Retrofit、OkHttp、Picasso、LeakCanary,几乎构 2026-06-21 随笔 1
Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 「Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑」 一个线上崩溃引出的问题 去年维护的一个项目,线上收到一条很奇怪的崩溃栈:Ille 2026-06-21 Android 1
Google 对侧载应用的扫描策略,APK 安装前检查 Google 对侧载应用的扫描策略,APK 安装前检查 Google 对侧载应用的扫描策略,APK 安装前检查 Play Protect 的"守门"逻辑变了 Android 15 开始,Google 把侧载应用的扫描时机往前挪了一大步。以前是你点了安装、APK 落盘之后,Play Protect 才 2026-06-21 随笔 0
Moshi 的代码生成,KSP 适配后的编译速度 Moshi 的代码生成,KSP 适配后的编译速度 Moshi 的代码生成,KSP 适配后的编译速度 从 KAPT 的编译噩梦说起 如果你用 Kotlin 写 Android 项目超过三年,大概率经历过 KAPT 的折磨。Moshi 作为 Square 出品的 JSON 解析库,早期版本依赖 KAPT 2026-06-21 tool 1
Android 开发者的工具链成本,哪些可以省 Android 开发者的工具链成本,哪些可以省 Android 开发者的工具链成本,哪些可以省 去年 JetBrains 宣布 IntelliJ IDEA 和 Android Studio 的授权策略调整时,我在一个开发者群里看到有人转发了一条消息,说"终于不用折腾破解了,直接换 VS Code"。 2026-06-21 随笔 1
App Startup 库真的能优化启动吗,实测数据 App Startup 库真的能优化启动吗,实测数据 App Startup 库真的能优化启动吗,实测数据 从一个真实的启动崩溃说起 去年下半年我在处理一个线上启动崩溃时,第一次认真审视了 App Startup 这个库。当时的问题是:我们在 Application.onCreate 里初始化了一个 2026-06-21 Android 2
WireShark 抓包分析移动应用网络请求 WireShark 抓包分析移动应用网络请求 WireShark 抓包分析移动应用网络请求 WireShark 这个工具在桌面网络分析领域几乎是标配,但把它拉到移动应用开发场景里,事情就变得复杂不少。我见过太多开发者以为装个 WireShark 就能看穿 App 的所有网络行为,结果在 HTTPS 2026-06-21 tool 2
Compose for iOS 的进展,真的能一套代码双端吗 Compose for iOS 的进展,真的能一套代码双端吗 「Compose for iOS 的进展,真的能一套代码双端吗」 Google I/O 2024 上那条"Compose for iOS 进入 Alpha"的官宣,让我手里的咖啡凉了一半。不是激动,是那种"又来了"的疲惫。KMM(Kotl 2026-06-18 随笔 4