一次Miui12精简、优化随记

文章目录
  1. 1. 背景
  2. 2. 前置准备
  3. 3. 去卡米
  4. 4. 精简系统App
  5. 5. 关于ZRAM
  6. 6. 关于SWAP
  7. 7. dex2oat
  8. 8. 优化工具推荐

背景

18年高考完家里人给我买的小米8se,到现在已经用了快两年了,高通710的U,4+64的内存。刚开始一年用得还不错,满足日常使用以及轻度游戏的需求。但是这个月升级了Miui12之后,明显感觉卡顿严重了很多,加上8se用的还是老一代的EMMC5.1闪存,会有掉速的问题,导致现在使用体验极差,切多任务掉帧,启动app卡个五六秒。一时兴起,精简一下系统app吧,系统app少了启动的服务也会少一些,系统也会相应地流畅一些。

前置准备

首先要刷开发版,稳定版可以直接不清除数据使用官方rec刷到开发版。然后在授权管理获取官方给的root权限,还得刷上wzsx150编译的最新支持安卓10的TWRP Recovery(在他的微博置顶能找到下载链接),并在TWRP里解锁AVB2.0和dm-verity,否则无法删改系统分区的文件。
那么需要做的前置准备:

  1. 确保当前系统是Miui12开发版
  2. 在官方授权管理里拿到root
  3. 刷入wzsx150编译的支持安卓10.0的TWRP Recovery
  4. 在TWRP的高级设置里关闭AVB2.0和DM校验
  5. 修改services.jar去卡米
  6. 精简App

去卡米

自Miui7开始,小米在Miui的framework层添加了开机校验,就是检查核心系统app是否被卸载,被卸载了就卡在开机界面不让你用。这里一般是为了卸载Miui自带的应用商店,如果不处理直接卸载应用商店会卡米。Android 10的反编译工具比较难找,我在Github试了几个都不能正常使用,后来直接手机端找的MT管理器,一次就成功了。由于我的系统默认是合并了odex的(很奇怪,反复确认了,确实是合并了的,不知道为什么),于是就省去了合并odex这个步骤了,不然安卓10要合并odex还挺烦的。

找到 /system/framework/ 目录下的services.jar,注意,一定要确认services.jar是合并了odex的,一般来说打开jar看看是否有dex文件,或者看jar的大小是否才几百k,或者1M左右,是的话就肯定是分离了odex的,需要合并,一般合并之后的jar大小在7M、8M,甚至更大。
反编译services.jar,(如果是使用MT管理器操作,则在classes2.dex里找)找到源码中的 com/miui/server/SecurityManagerService.smali 搜索 method private checkSystemSelfProtection(Z)V,这个函数的代码如下:

.method private checkSystemSelfProtection(Z)V
    .registers 3
    .param p1, "onlyCore"  # Z

    .line 677
    new-instance v0, Lcom/miui/server/SecurityManagerService$1;

    invoke-direct {v0, p0, p1}, Lcom/miui/server/SecurityManagerService$1;-><init>(Lcom/miui/server/SecurityManagerService;Z)V

    .line 747
    invoke-virtual {v0}, Lcom/miui/server/SecurityManagerService$1;->start()V

    .line 748
    return-void
.end method

line xxxline xxx之间的代码删除,删除后的代码如下:

.method private checkSystemSelfProtection(Z)V
    .registers 3
    .param p1, "onlyCore"  # Z


    .line 748
    return-void
.end method

这里将启动校验服务的代码删除了,也就跳过了校验,.line xxx是反编译的时候自动插入的行号注释,对应源java代码中的行数,删不删都不影响。
注意,如果你不熟悉smali语法,请严格按照教程操作,否则可能开不了机。修改完毕后回编译并替换回系统就可以了。这部分教程来自破解MIUI系统卡米限制,随心所欲调教精简系统,根据作者要求附上出处,并做了一些补充。

精简系统App

精简App的教程参考的这里 MIUI精简system不卡米教程(较为详细) ,推荐做法是在内置储存里新建个文件夹,在删除某个App之前先备份一份,这样万一出了问题卡米了,可以到TWRP里把删错的App放回去。这里我删得比较狠,把音乐、应用商店、快应用服务框架、浏览器等较为核心的App都删了,导致负一屏用不了,指纹支付也失效了,支付只能输密码,然后就是密码自动填充功能也没用了,所以说,谨慎操作,搞清楚自己是需要彻底的流畅还是保留尽可能多的服务。

关于ZRAM

ZRAM是一种基于Linux的内存压缩技术,开启后系统会将一些不活跃的内存数据压缩,放在内存里,需要的时候即时解压出来使用,说白了,就是一种CPU换RAM的技术。Miui默认是开启ZRAM的,以我的小米8se为例,4G RAM,Miui,默认给我开了2.2G的ZRAM,意为最大可压缩的RAM大小在2.2G。ZRAM可以显著提升手机的后台能力,不会后台挂个微信、QQ就卡得要死了。

关于SWAP

SWAP是一种将内置储存的空间当做RAM使用的技术,我们知道,不管是手机还是电脑,内置储存(电脑上则是硬盘)的读写速度远不如RAM,这就导致开启了SWAP的机器在使用到SWAP的空间的时候会变得很卡,而且对内置储存的寿命也有很大的影响。所以,一般我是极度不推荐开启SWAP的,不管是电脑还是手机都是,能不用就不用。

dex2oat

dex2oat是安卓4.4后随着art虚拟机引入的技术,简单地说,oat是一种dex编译后的本地代码(Native code)文件,我们知道,dex文件本质上是dilvik字节码文件,和java打包的jar差不多,都是需要在运行时解释的文件,这就导致了运行时的卡顿、延迟。oat文件是编译好的本地代码文件,可以直接执行,不存在运行时解释的问题,安卓系统一般是在安装App的时候将dex编译成oat,以便直接运行本地代码。而dex2oat编译的时候有两个模式,speed和everything,speed模式在安装的时候以速度优先,只编译部分字节码到本地代码,而everything模式则是直接全部编译成本地代码,基于这个原理,我们可以对所有App做一下everything模式的dex2oat,起到优化的效果。

优化工具推荐

上文提到的ZRAM、SWAP、Dex2oat,都可以在 Scene 这个App里开启或者设置,此App需要root,并且操作不当的话可能有变砖风险,请谨慎使用。ZRAM和SWAP在App的 功能-SWAP设置里可以调整,dex2oat则是在 功能-附加功能-运行性能-执行dex2oat编译找到。

玩机愉快!

分享到