关于MIUI官方锁bootloader后 锁死system分区和OTA更新的非官方说明

在解释这类问题前,我先说明你下旧版本的miui是怎么ota更新的,以及全量更新的方式,系统怎么确定更新方式(增量和全量更新)

 

在旧版本的miui上,系统更新默认都是采用OTA方式,然后patch变更的文件实现的.

在updater-script脚本中可以看到脚本先对需要patch的文件做了MD5对比,如果有任意文件出现MD5对不上的情况,

那么更新将会强行终止.如果文件没有被用户更改或者遗失,那么将对文件patch.

这种patch是基于文件的内部数据的变化的 [具体请百度:diff ?patch]

这种更新方式的优点是用户只需要下载每个文件内部的修改的数据就好了,不需要把整个文件都下载下来

缺点是patch的文件必须和创建patch时的原始文件一模一样,也就是这个文件是不能动的.

你修改了[比如破解补丁,deodex操作,ios状态栏],那么这些文件是无法操作的

因为越来越多的miui用户为了各种目的开始修改系统文件,或者刷修改版的rom,导致了系统无法更新,

且将这个问题归咎于miui官方或者无法准确的处理这个问题.

后来miui官方对系统更新做了修改,好像是校验了大部分的system分区的文件,只要有文件变了,就不能更新.

之后,改了系统更新App的逻辑,增加了校验system分区的功能,只要系统更新app认为你改了系统,那么只能全量更新.

 

在启用bootloader锁后,miui全面采用system.new.dat格式的补丁更新方式.

代码:

block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");

这种补丁不同于之前的基于单文件的补丁方式,而是基于文件系统的方式,这样的补丁方式能使补丁包变得更小.

然后刷入补丁的速度也变的更快,尤其是刷入完整的系统时,那速度明显快了好多.

缺点么,你也知道的,system分区将不能有任何变动,所以miui直接锁死system,

还有一点,你获取root后system就变了.所以你一直是收到全量更新(好几百MB的),并且更新后root会消失.