Google 今年灰度释出 SafetyNet 的 Hardware attestation 总算让我下定决定不再使用 root 安卓, 今晚刷回了 miui.eu 算是刷机之路的终点了, 回顾这两年来也折腾了不少, 记录一下看过的风景.
说到底我最最基本的需求是, 续航. 在几年前使用 Mi Note2 的后期, 满电的手机待机一夜起床就掉了 30%~40% 的电量, 简直不能忍. 而后来和流氓软件们斗智斗勇, 比如招商银行 app, 老虎基金 app, 真是煞费苦心.
从手段来讲, 无论是 disable package (icebox), 还是 disable broadcast receiver (greenify), 本质上都是在用户从前台退出后阻止应用在后台跑服务, 而这一点在我个人体验下, MIUI12 的 battery saver 的严格限制模式工作得非常好, 而且和 greenify / icebox 的不一样, 前者只能在熄屏后触发, MIUI12 可以挂到后台就触发, 这实际上和我自己实现的项目 aaec (https://github.com/jschwinger23/aaec) 做的事情是完全一样的, 而我使用 Tasker5.8 提供的 App Event + Termux + Python 调用 pm 命令行才实现了一个基本能用的东西, 非要说我的实现有什么好处, 那可以可拓展, 可编程, 比如通过手势触发 Tasker 添加 app 到处决名单之类的.
说到手势, MIUI2 的另一项功能也是我之前使用 GMD Gesture Control + Tasker 去实现的: 隐藏 app 和打开隐藏 app. 比如设置一个 app 为隐藏, 然后通过一个特别的手势打开, 回到后台后又自动隐藏. 实现上来说并不复杂, 但是使用场景是很好用的, 在隐藏状态的 app 在 UI 上可是找不到的(在 play store 能看到状态是已安装, 但是 Titanium 可以 disasociate). 在 root 安卓上手势可编程是非常经典的用途.
程序员嘛, 一旦了解了一项功能就想滥用, 比如 appops, 我当时就想搞成精细化管理, 比如打开微信才给它 grant 权限联网, 后台每隔十分钟才能联网一次收通知, 这样既能不错过消息, 又不会放任这种流氓. 从架构来讲, 这种做法非常不划算, 最好的做法是 iOS 的方案: 统一推送. app 直接限制在后台, 由中心服务器推消息, 节能, 及时, 干净. 然而安卓这乱象丛生的生态, 比不了 iOS.
除了用 appops 进行即用即 grant 的管理, 我一段时间的另一种做法扔到 work profile 里, 对, 也就是小米的应用双开, 或者是 Island 所做的事情. 这样就算流氓在里面拥有一切权限, 它看到的文件系统的是空的, 危害有限.
想念 Linux namespace, pid + mount + network + ipc + user + time 这一套隔离下来, 每个进程什么都看不到, 完全隔离的, 据说 iOS 也一直是如此实现, 而在 Q 之前 Redirect 提供了 mount namespace 的等价功能, 非常好用, 但是也仅限 mount namespace.
当然上面所说的这些精细化的操作, 大部分都纯属好玩, 本质上只要应用在不会被唤醒, 没有常驻进程, 那就算给予了权限也没用. 除了微信这种流氓, 不得不留着收消息, 那么隔离机制, 或者精细化权限管理机制, 或者统一推送机制, 就非常有意义.
说完续航, 下一个使用 root 的最大好处是让系统干净. 删除不喜欢的系统应用是我重装系统后的第一件事, MIUI.eu 虽然连 msa 都没有了, 但是我不用的应用却又十多个, 比如: Mi Mover, Mi Video, Music, Notes, Weather, Gallery, Compass, Calendar, Feedback, Mail, Browser, etc. 没有 root 的时候对这些系统应用简直没有办法, 只能扔到一个文件夹里, 看着都烦, 有 root 要么直接删除, 要么稳妥点直接 disable 避免卡米. 对我因为乱删应用卡米过, 再也不敢.
所以在非 root 的 MIUI12 上怎么办呢, 好办, icebox 有 Device Owner 模式不需要 root, 只要在第一次开机后立刻通过 adb 设置就行了. Device Owner 真是好东西, 为啥就没有一个 app 能过 delegate 呢, 只有它是 device owner, 然后帮其他需要 root 权限的 app 做事, 这样既没有 root, 也拥有了 root 权限.
说了半天, 我既然这么明白 root 的好处, 为什么我又不用 root? 因为 Google 反 root 已经越来越厉害了, BL unlock 状态检测, HW-based ctsProfile 检测, magisk 社区今年两次发文表示情况困难. 而 SafetyNet 过不了对我伤害极大, 最大的就是 GooglePay 用不了, 我通勤都指望用 GPay NFC 刷地铁啊, PayWave 也超级好用的, 我信用卡又多, 不想带. 此外各种银行 app 如果跟进使用最新的 SafetyNet API 的话, 那我甚至连银行 app 都用不了, 这比 GPay 不能用还要命, 耽误事儿.
所以我辱骂了几个月的谷歌, 终于决定放弃 root, 回归 device owner + MIUI.
那么又为什么是 MIUI 呢? 对不起, 我压根没得选吧.
- Pixel Experience, 吹得好, 结果耗电及其夸张, 待机一晚 -20% 的那种, 再你妈的见.
- LOS17, 干净是干净, 但是我到死都没安装上一个正常的相机 app. 相机是肛需啊亲.
- Blissom, 基于 LOS17, 差点把手机装成砖就不说了, 给 LOS 新加的功能我一个都用不上不说, 还动不动就随机重启, 很烦的.
- XenonHD9, 团队都解散了, 而且不知道为啥一靠近地铁站就自动重启, 我在听英语耶!
- crDroid6, 我知道团队觉得 appops 是好东西就集成到系统了, 但是我真的只想自己来编程管理啊, 你搞的 UI 我碰都不想碰.
再吐槽一下, MIUI 海外版都阉割掉了门卡模拟啊, 非 root 的我又没办法魔改, NFC 怀才不遇, 很伤心.
总之一番折腾, 还是觉得这样挺好, MIUI12.eu + Icebox, 希望能让我长久稳定地使用下去.