F-Droid 开源应用市场的使用体验 F-Droid 开源应用市场的使用体验 F-Droid 开源应用市场的使用体验 一个被忽略的官方仓库配置问题 我第一次认真用 F-Droid 是在 2021 年,给一台刷了 LineageOS 的备用机装应用。当时遇到的情况很典型:打开客户端,刷新仓库,然后看着进度条卡在 "Updating rep 2026-07-07 tool 0
VpnService 的隧道实现,MTU 和 DNS 配置细节 VpnService 的隧道实现,MTU 和 DNS 配置细节 「VpnService 的隧道实现,MTU 和 DNS 配置细节」 Android 的 VpnService 从 API 14 就有了,但真正能做出稳定可用的隧道实现,踩的坑远比文档上写的多。我去年维护一个基于 VpnService 的 2026-07-07 Android 0
Android 的功耗归因:WakeLock、AlarmManager、JobScheduler 谁更省电 Android 的功耗归因:WakeLock、AlarmManager、JobScheduler 谁更省电 Android 的功耗归因:WakeLock、AlarmManager、JobScheduler 谁更省电 去年接手了一个企业级 MDM 应用的功耗优化项目,用户反馈很直接:装了这个 App 2026-07-06 Android 3
WorkManager 的约束条件,电池优化下还靠谱吗 WorkManager 的约束条件,电池优化下还靠谱吗 WorkManager 的约束条件,电池优化下还靠谱吗 从一次凌晨的崩溃告警说起 去年维护的一个后台上传模块,线上突然报了大量 WorkInfo.State.FAILED 的异常。看日志很诡异:任务明明设置了 NetworkType.CONNE 2026-07-06 Android 4
GitHub Actions 的 Android CI 模板优化 GitHub Actions 的 Android CI 模板优化 GitHub Actions 的 Android CI 模板优化 那个被复制了十万次的模板有什么问题 几乎所有 Android 项目的 .github/workflows/android.yml 都是从同一个源头变异而来的:GitHu 2026-07-06 tool 3
ProGuard 和 R8 的规则文件编写技巧 ProGuard 和 R8 的规则文件编写技巧 ProGuard 和 R8 的规则文件编写技巧 从一次 4MB 的体积回退说起 去年维护一个老牌金融类 App 时,我踩了一个相当经典的坑。团队把构建工具从 AGP 7.2 升级到 8.0,R8 的 full mode 默认开启,发版后线上崩溃率从 0 2026-07-06 tool 4
DownloadManager 的大文件下载,断点续传靠谱吗 DownloadManager 的大文件下载,断点续传靠谱吗 「DownloadManager 的大文件下载,断点续传靠谱吗」 去年维护一个视频缓存项目时,我接到了一个看起来挺简单的需求:后台下载 500MB 以上的视频文件,支持断点续传,网络切换后能自动恢复。产品经理的原话是"系统不是有 Down 2026-07-06 Android 4
Appium 和 Espresso 的 UI 测试框架对比 Appium 和 Espresso 的 UI 测试框架对比 Appium 和 Espresso 的 UI 测试框架对比 从一次 CI 崩溃说起 去年维护的一个项目把 UI 测试从 Espresso 迁移到 Appium,三个月后又在深夜回滚。回滚 commit 的 message 写得挺克制:"Re 2026-07-06 tool 2
ContentResolver 的批量操作,applyBatch 还靠谱吗 ContentResolver 的批量操作,applyBatch 还靠谱吗 ContentResolver 的批量操作,applyBatch 还靠谱吗 从一次联系人同步崩溃说起 去年维护一个企业通讯录同步模块时,我在 Firebase Crashlytics 里看到一条稳定复现的崩溃: androi 2026-07-03 Android 4
Genymotion 桌面模拟器的现在和替代方案 Genymotion 桌面模拟器的现在和替代方案 「Genymotion 桌面模拟器的现在和替代方案」 Genymotion 的免费桌面版在 2023 年彻底停更这件事,很多老 Android 开发者可能是后知后觉的。我注意到这个变化是因为某个项目里 CI 流水线突然挂掉,追查下来发现是 Genym 2026-07-03 tool 3