本文介绍的是Android系统OTA升级,主要介绍升级包的制作和Android代码中如何实现系统的升级。文章中的升级功能是在Firefly-RK3399板子在Android7.1.2上完成测试,其中下文中的增量升级未测试成功,文章中把该种方式记录下来用于方便以后再来研究。

目录

全量包

增量包

Android代码调用升级

1. 全量包

命令

. build/envsetup.sh

lunch //然后选择你需要的配置(如15)

make -j8

make otapackage -j8

执行完上面的命令会在out/target/product/rk3399_firfly_box/rk3399_firefly_box-ota-en.jb.zip的zip压缩包。其中/rk3399_firfly_box/并非是固定的文件,这个文件夹大多是以自己板子的型号和厂商命名rk3399_firefly_box-ota-en.jb.zip也是更具自己厂商和设备型号命名,把该压缩包命名成update.zip也就完成了全量升级包的制作。

2. 增量包

Android增量的制作需要上一个旧的源码包和新的的源码包,其时我们通过制作全量包的命令就已经制作了源码包只是他们的所在的目录不同,

源码包路径

out/target/product/rk3399_firefly_box/obj/PACKAGING/target_files_intermediates/rk3399_firefly_box-target_files-eng.jb.zip

全量包路径

out/target/product/rk3399_firefly_box/rk3399_firefly_box-ota-eng.jb.zip

通过上面的两个路径我们可以知道,源码包和全量包生成的命名是相同的,只不过他们的存放路径不相同。其实他们的大小也不相同源码包要比全量包大(我测试中源码包为1.2G,全量包为567M),系统升级一般是用全量包和增量包升级。

制作增量包

制作增量包我们首先要准备一个最新版本的源码包和上一个版本的源码包如old.Zip和new.zip。然后我们在根目录创建创建一个OTA/文件夹,分别为将olde.zip和new.zip复制到该文件夹中,然后执行下面命令

./build/tools/releasetools/ota_from_target_files -i ~/OTA/old.zip ~/OTA/new.zip ~/OTA/update.zip

上面的命令

./build/tools/releasetools/ota_from_target_files为谷歌为我们提供的一个用于生产增量包的脚本。

-i 后面分别为旧版本源码包和新版本源码包的文件路径,做好一个是生产的增量包路径。

执行上面的命令我们就会在根目录下的OTA文件夹下生产了一个update.zip增量包

3. Android代码调用升级

如果您正好使用的是Firefly开发板供应商提供的板子,下面的这种方式可以不用看了。Firefly团队提供了一套方便开发者快速实现部分功能的api,该api中正好有系统升级功能的实现方法。请移步FireflyApi查看 安装升级

完成上面全量升级包或增量升级包都会得到update.zip升级包。我们就可进行系统升级了,一般系统升级分为在线升级和离线升级。

在线升级需要将我们生产的全量包或者增量包放到服务器上,根据自己业务将其下载下来行升级。

离线升级需要我们将升级包从U盘中拷贝到Android系统中进行升级。

不管是在线升级还是离线升级我们都需要将升级包拷贝到Android外部储存的根目录中才能升级

本文用的是离线升级,是将升级包拷贝到Android外部储存的根目录中的,文章末尾的参考连接中有关于网络下载升级的介绍。

权限

android:sharedUserId="android.uid.system" //系签名要添加的标识

...>

因为上面两个权限需要将应用做出系统及app才可以使用,因此需要系统签名。文章的末尾的参考连接中有关于系统签名的实现方式。

获取升级包

/**

* 获取升级包

*

* @return 升级包file

*/

public File getUdapteFile() {

File updateFile = null;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

String updatePath = Environment.getExternalStorageDirectory().getAbsolutePath()

+ File.separator + "update.zip";

updateFile = new File(updatePath);

boolean isExists = updateFile.exists();

LogHelper.getInstance().d("是否存在升级包:"+isExists);

if (isExists) {

return updateFile;

}

}

return updateFile;

}

校验和升级

/**

* 系统升级

*/

public void systemUpdate() {

File udapterFile = getUdapteFile();

try {

//签名校验

RecoverySystem.verifyPackage(udapterFile, new RecoverySystem.ProgressListener() {

@Override

public void onProgress(int progress) {

LogHelper.getInstance().d("签名校验进度:" + progress);

}

}, null);

//升级

RecoverySystem.installPackage(this, udapterFile);

} catch (GeneralSecurityException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

上面的RecoverySystem.verifyPackage()方法用于校验升级包的签名是否合法,我们在做升级名的时候make otapackage命令执行完已经为我们签好了名,因此不需要在签名了。

效果图

参考

ota升级 rk3399_Android7.1.2系统OTA升级相关推荐

  1. android 系统升级 方法,安卓系统怎么升级 浅谈安卓系统更新升级的几种方法

    最近有网友问小编"安卓系统怎么升级?",针对该问题,笔者也在网上查找了下相关资料,不过并没有找到什么有价值的相关介绍,多数都是介绍如何自动升级.或者下载升级版包等等方法,对于一些常 ...

  2. 小米3升级android 6.0,手机如何升级MIUI 6.0系统?miui升级图文教程

    小米自宣布8月16号发布MIUI 6.0以来,就受到了广大米粉的青睐,一直备受关注,如今MIUI V6如期发布,拥有这别致的桌面,强大的功能,果然没有让大家失望,那么手机如何升级MIUI 6.0系统? ...

  3. android升级刷机,安卓系统怎么升级 怎么刷机安卓系统

    您可能感兴趣的话题: 安卓系统怎么升级 核心提示:其实安卓系统升级的方法有很多,以下小编就来与大家介绍下吧. 安卓系统怎么升级 怎么刷机安卓系统 最近有网友问小编"安卓系统怎么升级?&quo ...

  4. 手机怎么升级android版本,安卓系统怎么升级?三种手机安卓系统升级方法教程...

    法一.使用手机自带的系统更新功能 在安卓手机的设置--关于手机中,可以看到当前安卓手机的系统版本,另外这里也有自动检测更新系统功能,这里就是安卓手机自带的系统更新功能,其更新主要由手机厂商提供,像小米 ...

  5. 鸿蒙系统升级教程,鸿蒙2.0怎么升级-鸿蒙OS2.0系统更新升级教程_全球下载

    目前华为mate20系列的手机已经使用上了鸿蒙系统2.0,用户可以对其版本进行升级,那么有华为自主打造的手机系统要怎么升级呢?有些小伙伴目前还不是很清楚,所以接下来全球手游网小编就给大家整理了鸿蒙OS ...

  6. 华为麦芒5云空间升级_华为麦芒5手机怎么升级?华为手机系统更新升级方法大全...

    我们都知道,无论是苹果的IOS还是安卓系统的手机,厂家为了修复一些BUG或是为了改善我们的用户体验.增加一些手机新功能,都会给我们的智能手机进行一些系统更新升级,这不前段时间华为就爆出为了让更多的华为 ...

  7. 服务器系统怎么升级,windows server 2008r2 系统在线升级注意事项

    你好, 假如你需要从std升级为enterprise 该命令应为Dism /online /Set-Edition:ServerEnterprise /ProductKey:XXXXX-XXXXX-X ...

  8. 华为a199升级android,华为a199系统怎么升级 华为a199系统升级方法【图文】

    在华为a199长期使用之后,由于我们华为a199里面的垃圾没有定期地去清除,所以导致我们的华为a199运行的越来越慢.这时候如果下载各种的垃圾清理软件可能已经没用了.所以在这个时候我们就需要把我们的华 ...

  9. Android9 ab系统OTA升级总结

    Android9 ab系统OTA升级总结 OTA升级介绍 官方介绍 https://source.android.google.cn/devices/tech/ota/tools#multiple-s ...

  10. 鸿蒙系统升级方式,华为鸿蒙系统怎么升级

    华为鸿蒙系统受到了不少用户的关注,该系统适用于大部分华为手机,支持ota升级,但是有许多用户还不知道如何升级,下面小编就为大家带来了华为鸿蒙系统更新升级方法介绍. 华为鸿蒙系统怎么升级 1.首先鸿蒙系 ...

最新文章

  1. 线性代数:05 实对称矩阵与二次型
  2. R语言data.table导入数据实战:data.table使用by函数进行数据分组(aggregate)
  3. 注册博客第一天,有些激动
  4. Cocos2D研究院之精灵与动画
  5. c#中结构体和类的比较
  6. 面向对象回顾(构造函数、覆盖和重载、Query接口的list方法和iterate方法、面向对象的六原则一法则、反射、内部类)
  7. Excel添加读音(中英均可)
  8. jquery插件最佳实践之progressbar
  9. php重定向和伪静态,Apache301重定向和伪静态设置教程(wp程序为例)
  10. vue-cli 打包部署
  11. vue学习之二ECMAScript6标准
  12. matlab 水文频率曲线,【求助】如何计算水文频率,外行求教 - 地学 - 小木虫 - 学术 科研 互动社区...
  13. 《算法》笔记 17 - 数据压缩
  14. Django视图层:Django便捷函数,render()函数返回HttpResponse对象,redirect()函数返回HttpResponseRedirect指向传递参数的URL
  15. Win9x 与 WinME 磁盘共享密码破解实战
  16. 拜托,面试别再问我堆(排序)了!
  17. bitlocker驱动器加密的解除方法
  18. win7便签怎么一直在桌面显示
  19. 基于Java的项目--酒店客房管理系统
  20. pygame模块实现乌龟吃鱼游戏案例

热门文章

  1. 一个数据存取类的代码,请高手帮忙分析和指定是否有误!
  2. OneNote使用技巧 - 5.快速设置首行缩进
  3. CSS 文字背景水印
  4. python根据生日自动批量产生中奖双色球
  5. 务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因
  6. Vue3源码解析04--响应式核心effect
  7. 导出表钩子之EAT HOOK解析
  8. linux系统it固定资产管理系统包_固定资产管理系统的细节分析
  9. 轻松升级各路硬件,简约时尚的大容量机箱,TT挑战者H6上手
  10. Wiki开源软件介绍