11 月 10 日,谷歌推送了 Android 17 QPR2 正式版,国内厂商的 ColorOS 17 等也前后脚开推。知乎哔哩哔哩
好消息是:QPR2 本身多是 UI 和设置层改动——通知图标显示管理、通知功能整合、主题自定义,外加「安全与隐私」里新增的 Agents Dashboard。坏消息没有。真正要命的 Android 17 变化早就上线了,只是很多团队还没发现——你的 App 可能正在被系统"暗杀",而且连个崩溃堆栈都没有。知乎

先查案:你的 App 是不是"消失"过
Android 17 开始,谷歌给每个 App 按设备总 RAM 加了内存上限。以前内存紧张靠 LMK 杀低优先级后台,现在只要一个 App 持续膨胀,哪怕持有前台服务也可能被直接干掉。诡异之处在于:它不一定表现为 Java/Kotlin OOM,也不一定留 crash 堆栈。知乎
官方给的自查方式:App 启动后用 `ApplicationExitInfo` 读历史退出原因,如果看到 `REASON_OTHER`、description 里包含 `MemoryLimiter:AnonSwap`,就是被内存限制器带走了。请把这条加进启动诊断链路并打点上报——不然"用户说 App 突然没了"永远是悬案。知乎
再补硬课:R8
Google 的适配建议里把 R8 放在第一位,语气前所未有的硬:AGP 9 起不再支持旧的 `proguard-android.txt`,`android.enableR8.fullMode = false` 必须移除。很多项目里祖传的 `-keep` 保命三件套,等于亲手封掉了整个代码库的优化空间。不敢动?AGP 9.3 起自带 R8 Configuration Analyzer,一份 `configanalyzer.html` 把 shrinking / optimization / obfuscation 三项打分,哪条 keep 规则挡了多少类和方法,一目了然。比盲改踏实多了。知乎知乎

大手术前的三个小动作
主动 trim:实现 `ComponentCallbacks2.onTrimMemory()`,重点处理 `TRIM_MEMORY_UI_HIDDEN` 和 `TRIM_MEMORY_BACKGROUND`(Android 14 起其他 legacy 回调系统已不再发送),App 不可见时主动释放可重建的缓存;
图片先看:一个 100KB 的压缩图,解码后轻松吃掉几 MB,Bitmap 往往是最大常驻对象。Android Studio Profiler 已支持重复 Bitmap 检测,跑一次 Heap Dump 心里就有数了;
装个"案发现场"监控:Android 17 的 ProfilingManager 新增 `TRIGGER_TYPE_OOM` 和 `TRIGGER_TYPE_ANOMALY` 事件触发,能在接近被杀前抓到 heap dump,再配合 `adb shell am memory-limiter` 主动复现。

为什么是现在
金标联盟早已把 Android 17 的适配节点定在 7 月 1 日。QPR2 也已在真机上开推,可 Android 17 的全球份额才刚过 1%。测试机越难凑,越要赶在用户撞上之前,把这几件事排进本迭代。就问一句:你项目的 R8 full 开了吗?知乎知乎