Scrcpy 的投屏控制,开发者调试神器 Scrcpy 的投屏控制,开发者调试神器 Scrcpy 的投屏控制,开发者调试神器 从一次真机调试的崩溃说起 去年维护一个视频播放器项目时,我遇到了一个只在特定机型复现的 Surface 渲染异常。手头那台测试机屏幕碎了一半,触控层时灵时不灵,USB 调试倒是开着。当时我的调试流程是:插线、adb 2026-06-11 tool 4
Square 开源库全家桶:OkHttp、Retrofit、Moshi Square 开源库全家桶:OkHttp、Retrofit、Moshi Square 开源库全家桶:OkHttp、Retrofit、Moshi Square 这家公司在国内开发者社区里存在感不算特别高,但只要你写过几年 Android,几乎不可能没用过他们的库。OkHttp 作为 Android 4 2026-06-10 tool 4
Jetpack 库的版本碎片化,不同库的版本怎么对齐 Jetpack 库的版本碎片化,不同库的版本怎么对齐 Jetpack 库的版本碎片化,不同库的版本怎么对齐 从一次 gradle 报错说起 去年十月,我把一个老项目的 compileSdk 从 33 升到 34,Gradle sync 直接炸了。报错信息很眼熟:androidx.lifecycle: 2026-06-10 随笔 4
Lint 自定义规则开发,我写完的第一条规则 Lint 自定义规则开发,我写完的第一条规则 Lint 自定义规则开发,我写完的第一条规则 从一次代码审查的重复劳动说起 去年下半年我们团队做了一次模块化重构,把原本耦合在 App 模块里的网络请求逻辑拆到了独立的 network 模块里。拆完之后我负责审查迁移后的代码,结果连续三天都在做同一件事: 2026-06-10 Android 4
Google Play 的政策收紧,开发者账号被封怎么办 Google Play 的政策收紧,开发者账号被封怎么办 Google Play 的政策收紧,开发者账号被封怎么办 2024 年的封号潮:不是个案,是系统性的 去年下半年开始,中文技术社区里关于 Google Play 开发者账号被封的帖子明显变多了。不是那种"我违反了政策被警告"的常规操作,而是大 2026-06-09 随笔 3
ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 Android 开发者对 ViewModel 的熟悉程度大概仅次于 Activity 和 Fragment,但 SavedStateHand 2026-06-09 Android 9
Android 开发者官网的隐藏页面和工具 Android 开发者官网的隐藏页面和工具 Android 开发者官网的隐藏页面和工具 developer.android.com 这个域名,大部分开发者每天打交道的就是那几样:API 参考文档、Jetpack 库的版本说明、偶尔查查 Material Design 的规范。但 Google 在这个 2026-06-09 tool 2
AtomicFU 的无锁并发,替代 synchronized 的场景 AtomicFU 的无锁并发,替代 synchronized 的场景 AtomicFU 的无锁并发,替代 synchronized 的场景 从一段性能测试的异常数据说起 去年在做 Kotlin 协程的通道(Channel)性能基准测试时,我遇到了一个反直觉的结果。测试场景很简单:两个线程通过 Cha 2026-06-08 Android 1
Timber 日志库的扩展,比 Logcat 好在哪里 Timber 日志库的扩展,比 Logcat 好在哪里 「Timber 日志库的扩展,比 Logcat 好在哪里」 Timber 这个库在 Android 圈子里已经存在很久了,Jake Wharton 2013 年写的,到现在 GitHub 上快两万星,算是最稳的第三方日志工具之一。但很多人用 T 2026-06-08 tool 2
Play Store 的评分算法更新,评论权重变化 Play Store 的评分算法更新,评论权重变化 Play Store 的评分算法更新,评论权重变化 从一条 2024 年 11 月的官方博客说起 Google Play 团队在 2024 年 11 月发了一篇博客,标题叫《Improving Google Play ratings with a 2026-06-08 随笔 3