Android平台应用更新的一点想法

    目前主流的两个种apk更新方式:
  • 通过市场更新
  • 通过app内部下载更新
       不过,根据随着android系统的发展,apk的体积变得越来越庞大,这种更新方式的时间成本和流量成本不断增加。Google显然也发现了这个问题,提供了Smart App update,即差分升级方式。通过提供不同版本apk间的差异档来减小需要下载的数据量。
       可惜的是,到目前为止,差分升级也没有成为主流,主要是对于差分档的管理太过复杂,新版本推出以后,需要对之前的每一个版本制作差分档,对开发者来说,也是个不小的负担。
       
        相比较起来,PC端的程序更新做的更加完善,比较成熟的解决方案是,通过更新部分dll库和图片/音频等其他资源来实现增量更新。原则上来说,Android应用也可以移植这样的更新方案。但是,需要解决两个问题:
  • 需要自定义ClassLoader来加载下载的jar文件
  • 需要基于事先约定的接口,或者反射等方式来调用下载的jar文件中的类

原则上,这种方案有以下优势:
  • 增量更新,减少数据下载量,减少更新所需时间,提升了用户体验
  • 无需再向市场上传更新包,减少了繁琐的审核,可以自由的控制应用更新

当然,也有一定的劣势:
  • 下载的jar档以应用数据的方式存在,容易被删除(Setting中的清空应用数据功能)
  • 服务器端和客户端要提供更加复杂的版本检查机能
  • 最后的,应该也是最困难的,在已经成型的产品上,使用这种更新方式,需要重构整个框架,约定高可扩展性的接口,大部分厂商应该都是不乐意接受这个成本的。

目前来看,一些大型游戏程序(>100MB)经常会用类似的方式更新资源包(主要是图片\音频\视频),还没有发现能够动态更新jar档的应用。希望以后随着Android的发展,能够在Android应用上看到这种更新方式。

    PS:暂不确定通过网络更新so文件的可行性

    对于差异化更新的进一步分析:

1. 最容易实现的方案:

整个app只包含一个Activity,所有的内容通过Fragment来展现,每一个fragment编译为.class文件,实现动态更新。
缺点:
对于原先就使用了Fragment的app,会出现fragment套fragment的情形,需要进一步研究。
如果需要更新Service/Receiver/ContentProvider等组件,还是需要更新apk才能实现。

2.最佳的实现方案:
实现四大组件的动态注册(注册到PackageManager),这样,四大组件的实现都可以编译为.class文件,实现动态更新。
缺点:
动态注册的可行性待研究
如果apk试图更新权限(permission),应该还是需要更新APK,才能实现。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值