玩机有风险,刷机需谨慎!!!
本文将带你学会如何备份Android设备的字库文件(包含基带)。
如需观看视频教程可跳转本人视频,文章、视频如有错误,欢迎指出!
什么是字库,为什么要备份字库?
字库可以简单理解为Android设备的分区。刷机时也会刷入分区,但刷入不完整。如果设备刚好是其他分区损坏了,那么即使线刷完整包也无法修复。所以为了预防特殊分区损坏、也为了预防不小心刷入格机模块(rm -rf /),玩机前我们需要自行备份Android设备的字库文件。
1 | 基带分区 |
请注意!!!如果是高通机型,可直接使用本文的命令,如果是联发科机型,请将下面命令中的/dev/block/bootdevice/by-name
修改为/dev/block/by-name
备份字库
本文使用的方法是手动在Shell中键入指令以达成备份字库的目的,酷安上有教程可在手机上直接执行备份和恢复,写的很好,但本人认为恢复部分有些许问题,因此不采用这种方法。缘由我已经在视频里说了,所以不要再在我视频评论区里说什么“XXX直接秒”之类的了,等你需要恢复字库的时候手机屏幕都不一定亮得起来。
备份的前提条件
· 设备需获取Root权限
我选择使用Magisk获取Root权限,获取方式参考我的视频。当然,如果你没有获取Root权限,或者说连Bootloader锁都没有解开,那也没有必要备份字库,正常用就行,多一事不如少一事。
· 开启设备的USB调试
在开发者选项中打开。
· 在Android至少预留20GB可用空间
现代Android设备分区很多,占用空间也很大,本人的小米平板6(pipa)备份文件大约十几GB。
· 给予Shell以Root权限
将设备连接至电脑,在终端进入adb shell(需提前拥有platform-tools,如何安装参考我的视频中安装驱动部分。首次使用设备会提示“是否给予Root权限”,给予即可。指令如下:
1 | adb shell |
备份流程
· 创建工作目录
首先,我们在设备sdcard目录下创建一个用于存储备份字库的目录:
1 | mkdir /sdcard/000_Backup |
这个时候我们就可以在设备的文件浏览器看到这个目录生成了,当然,这一步也可以使用设备独立完成。
· 读取设备的分区信息
在终端中输入以下命令,这里注意,我的指令中屏蔽了userdata和缓存分区(没有必要)。
1 | ls -1 /dev/block/bootdevice/by-name | grep -ixvE "userdata|cache" | while IFS= read -r name; do echo "dd if=/dev/block/bootdevice/by-name/$name of=/sdcard/000_Backup/$name.img" >> /sdcard/000_Backup/001_Backup.sh; echo "fastboot flash $name $name.img" >> /sdcard/000_Backup/002_Restore.bat; done |
执行完成后,000_Backup目录下会多出一个sh脚本和一个bat脚本,sh脚本用于读取备份,bat用于还原备份。
· 执行备份脚本
我们使用001_Backup.sh脚本执行备份:
1 | sh /sdcard/000_Backup/001_Backup.sh |
随后终端会显示备份的进度,耐心等待。
· 创建MD5值表(可不看)
备份完成后我们执行下面这条命令,它会计算我们备份出来的所有文件的MD5值并将其全部整理至003_MD5Hsah.txt这个文本中。
1 | cd /sdcard/000_Backup && md5sum * > /sdcard/000_Backup/003_MD5Hsah.txt |
备份MD5值是为了防止在存储过程中备份文件出现损坏,而我们浑然不知,将这个损坏的分区刷进手机导致出错。
到这里基础备份工作就完成了!
手动修改bat脚本(可不看)
我们备份字库的目的就是还原那些刷机包中没有的分区文件,如果刷机包中包含某些文件,我们就没有必要还原,不然可能会导致版本冲突,并且浪费时间。我们可以修改bat脚本中的指令,使还原的时候不会恢复super等分区。
1 | sed -i -e '/ super.img/s/^/::/g' -e '/ system.img/s/^/::/g' -e '/ system_a.img/s/^/::/g' -e '/ system_b.img/s/^/::/g' -e '/ vendor.img/s/^/::/g' -e '/ vendor_a.img/s/^/::/g' -e '/ vendor_b.img/s/^/::/g' -e '/ mmcblk0.img/s/^/::/g' -e '/ sda.img/s/^/::/g' -e '/ sdb.img/s/^/::/g' -e '/ sdc.img/s/^/::/g' -e '/ sdd.img/s/^/::/g' -e '/ sde.img/s/^/::/g' -e '/ sdf.img/s/^/::/g' -e '/ sdg.img/s/^/::/g' /sdcard/000_Backup/002_Restore.bat |
然后我们给它打包一下:
1 | cd /sdcard && tar -zcpvf PartitionBackup.tgz 000_Backup |
等处理完,我们就可以在sdcard根目录下就可以看到PartitionBackup.tgz,我们将tgz压缩文件备份至电脑端,以后要用直接解压就很方便了。到此为止,备份工作结束,我们可以删除设备存储中的000_Backup目录,释放空间。
恢复字库
当我们的设备分区损坏后,我们就可以通过我们备份的分区进行修复。我们只需要解压备份文件,将手机启动至Fastboot模式连接电脑,在终端执行我们备份文件中的002_Restore.bat脚本,我们备份的分区就会被写入设备,写完后我们再线刷一下官方线刷包,格式化data分区后就可以正常开机进系统了!
如果批量恢复后设备系统还是有问题,可以尝试在fastboot模式下擦除某分区,然后手动刷入该分区的备份,当然这么做有很大的风险。
擦除某分区
1 | fastboot erase 分区名称 |
刷写某分区
1 | fastboot flash 分区名称 用户刷写的文件路径 |