对于Android系统而言升级意味着二个方面的升级,一个是系统的升级,另一个则是应用程序的升级。系统的升级,比较麻烦,通常的方式就是通过刷机来实现,虽然也听说过可以通过OTA升级,但目前Android的设备都没有能够像Apple设备那样顺利的进行OTA升级,最主要的原因是设备厂商很少维护已售出的设备,所以没有可用的升级镜像。
这里我们重点谈谈Android上面的应用程序的升级策略及其所带来的问题。
无论你是通过Market还是其他方式来升级应用程序,它的工作方式都是酱紫的:把新版本的应用程序下载到本地,然后安装新版本,PackageInstaller会替换掉老版本。酱紫的方式有以下几个缺点:
- 升级速度比较慢,其实就相当于重新安装一样
- 伤不起的流量,一般的应用0~3M,有些大点的有4~9M,对于游戏更是达到了10~30M,升级一次很恐怖啊
- 升级时,由于 要下载新版本,所以会浪费一些存储空间
- 应用的数据和配置信息,有时会丢失,比如选择了UC作为默认浏览器,但升级后,它将不再是默认的,需要重新设置
- 旧版本所产生的数据,临时数据不一定会被删除
- 最恶心的是,如果二个版本的数字签名不一致,会导致新版本无法安装,要手动的把旧版本卸载,然后才能安装新的版本
- 这点跟Market无关,那就是有些应用升级以后反尔不好用,完全不如旧版本
有少数的应用也有与PC上面软件类似的自身升级的方法,但也都是下载新版本,卸载旧版本,再安装新版本。所以,即便是软件只更新了一个字串,那么升级时也需要整体折腾。
时常在想,为什么就不能像PC上面的软件那样,升级时只需要一个子集的升级包就可以了呢?可能的原因应该是有二个方面,一个是Android应用程序运行的机制决定的,另一个则是Market管理的方便。
Android当中软件安装完成以后,不像PC机那样解开了包,而是与安装包一样的存储在系统中。它是在程序运行时才从安装包中解析出需要的东西,加载进内存。所以,即使是应用只有部分更新,也没有办法像PC那样,只弄个升级包,因为升级包无法替换进入到安装包中。开发者只能对软件源码进行更新,然后重新编译打包成新版本。
那么Market中软件如果允许升级包的存在,那么新用户在购买的时候就要即买应用又买它的升级包,即要安装应用,又要一个一个的安装升级包,十分的不方便。
存在既有之的道理,希望有朝一日,它的升级策略能更加的友好一些,好用一些。