AGP 8.0 的 R8 全模式,我迁移时遇到的坑 AGP 8.0 的 R8 全模式,我迁移时遇到的坑 AGP 8.0 的 R8 全模式,我迁移时遇到的坑 上个月把项目的主干分支从 AGP 7.4.2 切到 8.0.0,Gradle wrapper 从 7.5 升到 8.0,compileSdk 也顺势提到了 33。Sync 过程比预想中顺利,Kot 2026-07-20 Android 1
Android 的 DNS 解析缓存,OkHttp 怎么控制 Android 的 DNS 解析缓存,OkHttp 怎么控制 Android 的 DNS 解析缓存,OkHttp 怎么控制 去年一次线上切流,我们给 CDN 域名换了 A 记录指向备用集群。监控里 iOS 端的错误率在五分钟后开始回落,Android 端的超时报警却持续了近十五分钟。后端确认新 IP 2026-07-20 Android 1
kotlinx.serialization 的稳定性,生产环境敢用吗 kotlinx.serialization 的稳定性,生产环境敢用吗 kotlinx.serialization 的稳定性,生产环境敢用吗 去年把项目里的 Gson 全面替换为 kotlinx.serialization 时,我遇到的最直观问题不是运行时 crash,而是 CI 直接编译不过。Kot 2026-07-20 tool 0
Apollo Kotlin 的 GraphQL 客户端,缓存策略配置 Apollo Kotlin 的 GraphQL 客户端,缓存策略配置 Apollo Kotlin 的 GraphQL 客户端,缓存策略配置 线上环境出现过这样一种情况:用户在个人资料页修改了昵称,返回列表页后,下拉刷新,列表里旧昵称闪了一下,紧接着变成了新昵称。这个“闪一下”的过程在弱网环境下尤为明 2026-07-20 tool 1
Fastlane 的自动化发布流程,Play Store 上传 Fastlane 的自动化发布流程,Play Store 上传 Fastlane 的自动化发布流程,Play Store 上传 去年夏天,我在给一个新项目上传第一个内测版本。Play Console 的 Web 界面已经提示必须提交 Android App Bundle,但手动拖拽上传 AAB 之后 2026-07-20 tool 1
Crashlytics 的自定义日志,定位 Native Crash Crashlytics 的自定义日志,定位 Native Crash Crashlytics 的自定义日志,定位 Native Crash 去年线上有一个 Native Crash 把我们折腾了挺久。信号 SIGSEGV,崩溃地址 0x0000000000000000,Firebase Consol 2026-07-20 Android 1
VS Code 写 Android,插件生态够用吗 VS Code 写 Android,插件生态够用吗 VS Code 写 Android,插件生态够用吗 从一次 Gradle 同步崩溃说起 去年把主力开发机从 Intel Mac 换成 M3 MacBook Pro 之后,我做过一个实验:把 IntelliJ IDEA 卸载,只用 VS Code 写 2026-07-17 tool 2
Charles 和 Proxyman 的 HTTPS 解密配置教程 Charles 和 Proxyman 的 HTTPS 解密配置教程 Charles 和 Proxyman 的 HTTPS 解密配置教程 在 Android 开发里抓包,最常见的情况不是配代理,而是配完代理之后满屏的红色叉号。Charles 的列表里显示 <unknown>,Proxyman 的 Fl 2026-07-17 tool 2
Android 14 的截屏检测 API,能做什么不能做什么 Android 14 的截屏检测 API,能做什么不能做什么 Android 14 的截屏检测 API,能做什么不能做什么 Android 14 正式引入 DETECT_SCREEN_CAPTURE 权限和 ScreenCaptureCallback 的时候,我第一反应是:Google 终于把这个坑 2026-07-17 Android 5
Android 的增量编译,到底省了多少时间 Android 的增量编译,到底省了多少时间 Android 的增量编译,到底省了多少时间 从一条 UP-TO-DATE 日志开始 前阵子升级一个老项目到 AGP 8.1.0 + Gradle 8.2.1 + Kotlin 1.9.10, clean build 时间从 3 分 20 秒涨到了 5 2026-07-17 Android 4