记一次给Mi4刷Lineage的经过。

00 起因

手头上正好有了一个旧的Mi4,拿来刷个系统当测试机还勉强能用,正好听闻Lineage可以网络ADB调试(其实是没钱买pixel,又想用新版本Android)。

话不多说,直接上Lineage官网,发现Mi3/Mi4的选项已经变成灰色了,官方说已经停止更新支持了,但是有兴趣的开发者可以自己编译,那就编吧。

Local Picture

整了个台式(256的mac空间捉急),装了VM+Ubuntu,配好了ladder,开始repo sync,家里的百兆跑满了带宽,心满意足的下楼散个步。。。回来的时候已经sync完了,发现竟然跑了25个GB(QAQ,一个月ladder流量才60GB)。然后按照官方的Build for cancro,结果发现sync得到的repo里面的内容和文件以及和instruction里的不一致了,有关cancro的文件都不见了,breakfast cancro 执行后竟然告诉我 Don’t have a product spec for: ‘lineage_cancro’,官方不支持后,连repo都清理干净了,然而流量不允许我再去找旧的repo了,还是去找现成的rom吧。。。=_=

之后找到了三个现成的rom,两个是老外编的基于Android8.1和Android9,还有个基于Android9的是国内论坛上找到的。

02 刷机

可以参考官方刷机教程

还是记录一下刷机的教程,方便以后再折腾。

首先,电脑上安装adbfastboot,不会的参考上方官方刷机教程,如果做过android开发,sdk里自带的就有。

然后,手机解锁,就是解Boot Loader锁俗称BL锁,解完才能刷入新的Recovery镜像(就像Bios一样),刷入合适的Recovery才能去刷入新系统(Recovery模式下可以挂载系统分区修改系统文件),比较常用的第三方Recovery就是TWRP,然后在Devices里找到和自己机型适配的很关键)(Mi3和Mi4代号都是cancro,因为硬件基本一致,所以我就选了Xiaomi Mi 3 (cancro)),下完命名recovery.img,方便刷入。

然后,手机连上电脑,允许USB调试,adb reboot bootloader或者Volume Down + Power进入FastBoot模式,命令行fastboot devices可以看到设备号就可以说明此时设备已就绪很关键),之后fastboot flash recovery recovery.img,好了后再fastboot boot recovery.img或者Volume Up + Power进入Recovery模式,此时能看到TWRP熟悉的界面(常见就不放图了)。

然后清空手机,点击Wipe,然后点Format Data,滑动确定,“这将会移除加密并且删除存储在内部存储里的所有文件”(翻译官方教程)。返回到之前菜单,点击Advanced Wipe,然后选择CacheSystem分区并滑动清除。

然后返回到TWRP开始界面,点击Advanced,选择ADB Sideload,滑动确定,设备进入了等待adb sideload状态,此时在电脑上找到rom包的目录,运行adb sideload Lineage_xxxx.zip,然后喝口茶等它慢慢刷入。因为比较想体验新系统,我就选择了国外的那个基于Android9的包。

官网上还推荐了刷入Additional packages比如Google Apps,其实就是Google框架,比较常用的包是Open GApps,里面有四种CPU架构,Android4.4-10.0版本,以及包内容的定制选项,鼠标放在选项上会有说明,很详细的,我就选个推荐的stock包吧。然后和上面一样的Sideload方法刷入,然后到6%的时候手机上开始出现Open GApps的logo,并开始刷入处理,然而它喵的告诉我/system分区空间不够,我看stock包有651MB,然后就去下载了pico包,这个才109MB,再次刷入,还是告诉我/system分区空间不够,提示我去看一眼日志,adb shell进去,去/sdcard/下看一下log文件,发现还差了一些空间,fdisk -ul /dev/block/mmcblk0看一下各个分区大小,发现/system只有1342MB,系统已经占了快1GB了,话不多说,直接重新分区。

03 重新分区

需要parted工具,之后搭配重新分区脚本,工具放网盘了: https://pan.baidu.com/s/1hY4D1oFxlocHo-fAS_NnYw 密码:ukhw

在Recovery下将parted文件复制到/sbin目录下,将repartition脚本复制到根目录/下,将二者的权限修改为755.

adb shell下运行parted /dev/block/mmcblk0 print打印当前分区详情

Local Picture

注意:如果system分区的起始位置不是403MB,需要修改为实际位置

重新分区脚本如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/sbin/sh
# 卸载分区
  umount -l /system
  umount -l /cache
  umount -l /system
  umount -l /dev/block/mmcblk0p23
  umount -l /dev/block/mmcblk0p24
  umount -l /dev/block/mmcblk0p25

# 删除分区
  parted /dev/block/mmcblk0 rm 23
  parted /dev/block/mmcblk0 rm 24
  parted /dev/block/mmcblk0 rm 25

# 新建分区
  parted /dev/block/mmcblk0 mkpart primary 403MB 3940MB
  parted /dev/block/mmcblk0 mkpart primary 3940MB 4348MB
  parted /dev/block/mmcblk0 mkpart primary 4348MB 15.8GB
	
# 命名分区
  parted /dev/block/mmcblk0 name 23 system
  parted /dev/block/mmcblk0 name 24 cache
  parted /dev/block/mmcblk0 name 25 userdata

# 重新卸载分区
  umount -l /system
  umount -l /cache
  umount -l /userdata
  umount -l /dev/block/mmcblk0p23
  umount -l /dev/block/mmcblk0p24
  umount -l /dev/block/mmcblk0p25

# 格式化分区,cache,userdata将默认的5%保留空间改为0
  mke2fs -b 4096 -T ext4 /dev/block/mmcblk0p23
  mke2fs -b 4096 -T ext4 -m 0 /dev/block/mmcblk0p24
  mke2fs -b 4096 -T ext4 -m 0 /dev/block/mmcblk0p25

运行重新分区脚本./repartition,过程中有"umount"和"information"的警告信息,可以不用管。

重启Recovery,进入adb,使用fdisk -ul /dev/block/mmcblk0查看分区是否成功。

04 刷Open GApps

这次system大小该足够了,Sideload刷入pico包,结果特nima还报我空间不够。。=_=#

然后网上还看到一个可以查看实际rom分区信息:TWRP里点Wipe,然后点Advanced Wipe,选择System分区,点击Repair or Change File System,可以看到system分区实际大小,已占用大小,剩余大小等信息。这些其实是rom真实分配的空间大小。幸好有个选项Resize File System,然而当我点击后,报了个e2fsck的错误,真让人摸不着头脑。e2fsck是linux系统下管理磁盘分区的,Android系统中一般在/sbin下,是系统自带的,怎么还会出毛病,我怀疑这个第三方编译的系统包可能有点“暗伤”。

那就换成基于Android8.1的国外的那个包,重新刷遍系统,再下载匹配的Open GApps的pico包。刷入前在TWRP里Resize一下System分区,很流畅,然后System分区变成了预先设定的3.3GB了(之所以这么大是因为担心以后还会刷软件)(还有,官网教程里强调在初次运行系统之前把Open GApps包刷进去,我试过运行一次Lineage后再刷入Open GApps,发现Google服务框架会崩掉),然后Sideload刷入Open GApps包非常顺利,然后启动等系统慢慢加载好,就是一个带有Google框架的Lineage15.1 OS的Mi4了。

这个包的下载地址为: https://androidfilehost.com/?w=files&flid=213298

或者给云盘链接: 链接:https://pan.baidu.com/s/1X1yfxczsTGCcxeperuVe2g 密码:m2nj

至于国内的那个包,刷上后一堆自带应用,360全家桶blabla的,而且体态庞大,不流畅而且发热,故排除。

05 刷入Magisk

Magisk是现在root手机的神器,听说还是台湾小伙开发的,赞一个。

去其Github Release上下载最新版Magisk.zip包和MagiskManager.apk,然后Recovery下sideload刷入zip包,启动系统后adb install刷入Magisk APK,然后就可以嗨皮了。