你可以使能运行Android5.0的新设备启动基于块的OTA升级.OTA是设备运营商远程更新一个设备的部分系统的机制.
Android 5.0和后续版本使用块设备OTA升级来确保每一个设备使用精确的相同的分区.块OTA处理整个分区作为一个文件并且计算一个单一的二进制补丁,而不是比较单独的文件和计算二进制补丁,确保生成的分区保存精确的目的位.这允许设备系统镜像通过fastboot或者是OTA实现相同的状态.
Android4.4和之前的版本使用文件OTA更新,文件OTA确保设备包含相同的文件内容,权限和模式,但是他以更新方法为基础,允许元数据例如时间戳和底层的存储分布去分辨设备.
由于块OTA确保每一个设备使用相同的分区,他允许使用DM验证来加密系统分区.后面会在”验证Boot”一节讲到dm验证.
注意:在使用dm验证之前,你一定要有一个可用的块OTA系统.
建议
对于Android5.0或者是后续版本的设备来说,在出厂ROM中使用的就是块OTA更新.为了为后续更新生成一个基于块的OTA,向ota_from_target_files中传递–block参数.
对于Android4.4或者是之前的版本,使用文件OTA更新.虽然有可能通过发送一个完整的Android5.0或后续版本的块OTA去转换设备,但是他需要发送一个完整的OTA,完整的OTA比一个增量OTA大很多.
因为dm验证需要Android 5.0或者是后续版本的新设备中的bootloader支持,对于现有设备,你不能使用dm验证.
工作在Android OTA系统(recovery镜像和生成OTA的脚本)上的开发者可以通过订阅 android-ota@googlegroups.com 的邮件列表来保持变化.
文件 VS 块OTA
在一个基于文件的OTA更新期间,Android尝试去改变位于文件系统层(以文件为基础的文件)的系统分区的内容.更新并没有保证以一致的顺序去写入文件,拥有一个一致的上次的修改时间和超级块,甚至是将块置于块设备上相同的位置.这个原因,基于文件的OTA在dm验证使能的设备上就会失败;在OTA尝试之后,设备就启动不起来了.
在基于块的OTA更新期间,Android提供设备的两个块镜像(而不是两套文件的集合)的不同.更新程序使用下面的方法检查位于块设备层(位于文件系统下面)的相应的构建服务:
全更新.复制整个系统镜像是简单的,并且生成补丁也很简单.但是生成一个大镜像能够使制作应用补丁非常昂贵的.
增量更新.使用二进制求异工具生成更小的镜像,并且使得生成补 丁应用也很简单,但是在生成补丁程序的时候是内存密集型的.
注意:adb fastboot将位于device中的完全相同的位作为一个完整的 OTA,所以flashing对块OTA是兼容的.
更新未被改进的系统
对于运行Android 5.0的带有未被修改的系统分区的设备,对于块OTA的下载和安装和文件OTA是一样的.然而,OTA更新可能包含一个或者是更多下面的不同:
下载大小.全块OTA更新大约和全文件OTA更新的大小是一样的,但是增量更新可能会大那么几M
比较Android 5.0和Android 5.1发行版的Nexus 6 OTA的大小总体上,增量块OTA更新比增量文件OTA更新要大一些,因为:
- 数据保存.基于块的OTA比基于文件的OTA保存更多的数据(文件元数据,dm验证数据,ext4分布等).
- 计算算法不同.在一个文件OTA更新中,如果在这两个构建版本中,文件路径是相同的,OTA包不为那个文件包含数据.在一个块OTA更新中,在一个文件中决定很小或者是没有变化取决于补丁计算算法的质量和源与目标系统中的文件数据布局.
故障flash和RAM的敏感性.如果一个文件损坏了,如果他不接触损坏的文件的话,文件OTA还是会进行;但是如果块OTA检测到在系统分区上有损坏的话,块OTA就会失败.
更新改进的系统
对于运行Android 5.0的带有改进系统分区的设备来说:
增量块OTA更新失败.系统分区可能会在adb重新挂载期间或者是被恶意软件所修改.文件OTA容忍分区的一些改变,例如添加不是源码或构建目标的额外文件.然而,块OTA更新不容忍分区的任何附加,所以用户需要安装一个全OTA来覆盖系统分区或者是烧入一个新的系统镜像来使能以后的OTA更新.
尝试去改变改进的文件导致更新失败.对于文件和块OTA更新来说,如果OTA尝试去修改一个已经被改进的文件,OTA更新就会失败.
尝试去访问该改进的文件可能生成错误(仅仅是dm验证).对于文件和块OTA更新来说,如果dm验证被使能了,并且OTA尝试去访问改进的文件系统的部分内容的话,OTA就会生成错误.