OTA 升级
定义:
升级的两种方式:全包升级和差分包升级。
全包升级:是指进入Recovery模式进行整个系统的升级,(4.1整个系统升级包110多兆)
差分包升级:是指根据两个版本之间的差别升级系统。(差分包一般很小,几兆到几十兆)
差别:
全包升级:可以将任意版本升级到全包所对应的版本,不需要考虑当前系统版本
差分包升级:只能从特定的版本升级到另一个版本,根据当前系统的版本选择对应的升级包,一般差分包都很小,适合网络升级。
如何升级:
全包升级:
前提:
1. 源码一份
2. 编译源码
3. out/host/linux-x86/bin 下运行./fastboot flashall –w不会黑屏(bootloader模式下),保证编译出来的代码能够在机器上正确运行。
生成升级包命令行:
-
.build/envsetup.sh
-
lunch4 //项目要求
-
makeotapackage //编译生成包
如果成功:我们需要两个生成的文件
-
out/target/product/grouper/full_grouper-ota-eng.root.zip
文件路径根据项目的不同而不同,会在命令行提示生成在哪。这个文件先定义为sdcard升级包A。
(如果运行失败:我遇到了两种情况,一种是编译了一次之后没做任何修改,默认是不会编译的。第二种没有规则去编译otapackage,我的处理方式是重新开一个终端在按步骤运行一次,不知道原因是什么)。
第二个我们需要的文件:
out/target/product/grouper/obj/PACKAGING/target_files_intermediates/full_grouper-target_files-eng.root.zip
这个文件是后面生成OTA差分包需要用的。先称之为OTA升级包old
此时我们就可以进行全包升级了
升级:
前提:需要文件sdcard升级包A。
将次文件拷贝到机器的sdcard下。重启机器进入bootloader模式。(adbreboot-bootloader)
如图:
选择:Recoverymode 启动。出现下图
如果没出现如上图:而是直接
还需要刷recovery.img。此处应该是google定制的recovery.img。
此文档意外还提供了一个N7FBT.rar。解压文件
-
进入bootloader模式
-
命令行运行:cd到解压的目录,运行fastbootflash recovery R6.img。
-
重新启动bootloader。
再选择recoverymode启动,就可以看到如下:
选择installzip from sdcard,选着push进去的zip文件就可以完成全包升级了。
(有升级失败的情况,我遇到的都是包有问题,所以请先确保out/host/linux-x86/bin 下运行 ./fastbootflashall –w 不会黑屏~)
重启机器,升级完成!
OTA差分包升级:
前提:前期编译,获得了文件OTA升级包old。拷贝到任意目录(比如root/ota/old)
并将机器用全包升级到这个升级包对应的版本。
在代码中任意修改内容(做实验可以选择能够直接看出效果的内容进行修改)。
-
步骤:
修改完成后,编译代码。
-
以同样的方式生成文件
文件1:out/target/product/grouper/full_grouper-ota-eng.root.zip(全包升级文件,此处不需要)
文件2:
out/target/product/grouper/obj/PACKAGING/target_files_intermediates/full_grouper-target_files-eng.root.zip (此文件我们需要,称为OTA升级包new)。
-
将OTA升级包new拷贝到文件夹中(比如root/ota/new)。
-
生成差分包:
-在src根目录下执行./build/tools/releasetools/ota_from_target_files-i <A包> <B包><差分包名>
(网上说:这里必须在src根目录下执行,因为ota_from_target_files.py这个脚本里面写定了相对路径的引用文件。具体没试过,但是在src下运行肯定没错)
举例:命令如下:
./build/tools/releasetools/ota_from_target_files
–i
root/ota/old/full_grouper-target_files-eng.root.zip
root/ota/new/full_grouper-target_files-eng.root.zip
root/ota/update.zip
(文档格式要求,用空格。)
如果运行正确,会在root/ota/下生成文件update.zip。
-
OTA差量包的使用:
-
以上为例:先将机器使用全包升级,升级文件为sdcard升级包A。
-
在make出来的文件update.zip push 到机器的/data目录下。(此处必须在/cacheand /data目录下)
-
任意写程序调用:android.os.RecoverySystem.installPackage(Context context, File packageFile) 参数:context和文件路径,此处为/data/update.zip
-
需要的权限<uses-permissionandroid:name="android.permission.REBOOT"/>(如果还需要其他权限,请自行添加,此处我是加到settins中的,权限很多。API上说明的只要此权限)
-
运行程序,机器重启自动升级。
-
升级完成。