原链接:http://my.oschina.net/jack1900/blog/301330
移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力。说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面,就让用户下载10几兆甚至更大的apk,而且在目前国内这个4G还不是普及的时候,对用户来说是很不友好的。有没有这样一种策略呢,就如windows系统上打补丁一样,通过体积比较小的补丁来完善系统存在的bug或者新功能的实现,如果可以实现的话,用户就再不会苦着脸去更新app了。答案是肯定的,要实现这个功能,需要以下两个步骤。
一、比对新版本与老版本之间的差异,最好只下载差异的部分
思路很简单,也非常清晰,那我们就照着这个目标行进。apk本身其实是一个zip压缩包,你改下后缀名,再双击解压就能得到apk内部的编译打包后的文件,图片音频等文件是直接可以可读的,其他的就得通过反编译工具去查看了。所以我们应用的安装文件apk就是一个二进制文件,如何得到两个二进制文件的差异文件---差异包呢?好消息是已经有前人实现了,它的名字bsdiff,一个差异包比较工具,全称是binary diff,二进制差异的意思。通过bsdiff,我们就能得到两个apk的差异包了,下面我会把整理的命令文件打包到代码中上传Github上供大家使用的。bsdiff为我们提供的仅是一组用C实现的代码,需要自己去编译构建,我已经为大家准备了windows、OSX、Linux不同平台下使用的命令。
由于我的电脑是macbook,执行命令如下
执行命令之后,得到xx.patch,我们下面要下载的就是这个差异包。根据不同版本之间的差异,相对整个apk来说,差异包的体积会小很多。同时如果你 的应用老版本有多个的话,你就需要生成对应的多个差异包。如果要想生成的流程自动化的话,找后台的哥们配合下就能轻松解决。
二、手机本地下载差异包,再和旧版本apk进行合并,最后合并成新版本apk。
根据当前版本号,向服务器发起请求,就得下载到对应的差异包。下面就是旧版本apk和patch合并的一步了,由于java本身并没有提供相应的api, 我们需要C去帮助实现,然后生成.so包进行调用。相对于生成差异包的bsdiff,也给提供了另一个bspatch,这个就是帮助我们进行文件和平的。 如果要在Android中实现这一步,就需要去配置NDK的开发环境了,如果不想的同学可以直接把demo里面的.so文件拿出来用。调用下面的这个方法 就可以实现文件的合并
合并出的apk文件,与最新的安装包并无区别,具有同样的特征值。最后通过Intent进行安装。
写在最后:有可能有的用户所使用的版本比较老,与最新的apk相差很大的话,还是建议根据生成差异包的大小进行判定是否去直接下载apk进行更新。同时根 据不同版本对应不一样的差异包,和后端的小伙伴合作去自动化生成的话,大大减少了生成差异包时间上的浪费。最后如果只是修复关键性bug或者几个新需求的 添加,产生的差异包会很小,也会大大的减少了用户的下载时间和流量消耗。
源码地址:https://github.com/JackCho/AndroidPatchUpdate
分享到:
相关推荐
Bugly Tinker 是一款强大的Android热修复解决方案,它支持对Android应用进行动态下发和修复代码及资源,实现了类似iOS的热补丁功能。Tinker不仅能够修复运行时的崩溃问题,还可以处理逻辑错误和资源更新,极大地提升...
在移动操作系统领域,iOS和Android的安全架构各有特点,它们都致力于保护用户数据和系统的完整性,但实现方式有所不同。本文将对比分析两者在防止应用的恶意行为、防止系统被Root以及防止系统被重烧等方面的安全机制...
<!--AppInterface — 让JSBridge更简单一点 ...方案一应该是目前(或遗留项目)采用最多的方案,方案二是针对iOS9识别不到方案一而采用的打补丁方案,方案三也有不少人在用,方案四与方案五应该是同级的,同时可以
越狱是指通过技术手段解除苹果设备上的软件限制,使得用户可以安装非App Store来源的应用程序,自定义设备界面,以及访问系统深层设置。这个过程通常涉及到对iOS系统的安全漏洞的利用。 在iOS 8.4.1版本发布后,...
蓝牙补丁通常是一个软件更新,它修复了原系统中存在的问题,或者添加了新的功能,如本例中的蓝牙立体声支持。补丁的发布是为了优化用户体验,提高设备性能,或者解决兼容性问题。在手机上安装蓝牙补丁,可以显著提升...
3. **安装主题**:虽然 iOS 不像 Android 那样可以直接安装主题,但有些应用如 Winterboard 或 Zeppelin 可以帮助你更改状态栏、锁屏和图标样式,实现一定程度的主题定制。 4. **设置动态壁纸**:除了静态壁纸,iOS...
它可能提供了新的脚本语言和协议分析器,用于录制和回放移动应用的操作,支持iOS和Android等平台。这将帮助测试团队更有效地测试移动应用的性能、稳定性以及用户体验,确保在不同设备和网络环境下都能正常运行。 在...
5. **兼容性与性能**:SOPHIX支持Android和iOS两大平台,且对各种设备和系统版本有良好的兼容性。其热更新过程通常对应用性能影响较小,因为大部分处理都在后台完成。 6. **安全性**:SOPHIX采用加密传输和数字签名...
1. 及时更新系统:无论是Android还是iOS,保持系统最新可以有效防止已知漏洞被利用。 2. 审慎安装应用:只从官方商店下载和安装应用,避免第三方来源。 3. 使用安全软件:安装可靠的安全防护软件,定期扫描并清除...
- 更新WebView:由于WebView基于浏览器内核,应定期更新,以获取最新的安全补丁和性能改进。 总结,WebView是移动应用开发中的重要工具,通过它,开发者能够将网页内容无缝集成到原生应用中,提供丰富的用户体验。...
在完成上述所有配置后,移动端应用程序(Android、iOS和H5)就可以与ECSHOP服务端进行通信,从而提供无缝的移动购物体验。 注意:在实际操作中,务必遵循服务器提供商的指南和最佳实践,确保系统安全性和稳定性。...
6. **软件更新**:iOS设备通常能获得更长时间的操作系统更新支持,这意味着即使较旧的设备也能享受到最新的特性和安全补丁;而Android设备的更新情况则取决于制造商,部分设备可能无法及时获得更新。 综上所述,...
【E4A 8月26日补丁】是一个针对E4A(Easy4App)编程环境的更新补丁,其主要目的是为了优化程序性能、修复已知问题或增加新功能。E4A是一个广受欢迎的移动应用开发工具,特别适合初学者和小型企业,因为它提供了简单...
3. **定期更新**:为了保证功能正常运行,用户需定期更新APP,获取最新的安全补丁和新功能。 综上所述,蓝色TP信用卡智能管理APP是一个集自动化记账、账单提醒、预算规划等功能于一体的综合性工具,它利用现代科技...
2. **APP开发**:一号集市APP的开发过程中,可能涉及到了iOS和Android平台的适配,因为通常一个APP会覆盖这两种主流操作系统。开发者可能使用了跨平台开发工具,如React Native、Flutter或Xamarin,以减少代码重复并...
本压缩包包含三个补丁文件:01-新增自研app保活机制.patch、02-新增自研app保活机制.patch、03-新增自研app保活机制.patch,这些文件很可能提供了逐步实现或优化app保活功能的代码修改方案。 1. **保活机制概述**:...
项目有基于 vue 开发的后台管理端和后台服务,还有支持补丁更新的 iOS 和 Android 客户端,从前端到后端,提供了全栈式的解决方案。 用户在后台管理端创建应用,在应用下面上传每个版本的全量包,后台自动生成针对前...
Zulip Mobile是Zulip的官方移动客户端,同时支持iOS和Android。 下载这个软件 该应用的发行版本可在此处获得: 在iTunes App Store上 Google Play商店上的或者,如果您不使用Google Play,则可以从我们在GitHub上...
在实际应用中,uniapp源码的提供意味着niushop系统致力于跨平台开发,通过uniapp框架,开发者可以快速地构建适应于iOS、Android、微信小程序等多个平台的应用。这不仅降低了开发成本,也增强了商城系统的多终端适配...
Xamarin 是一个 App 应用开发平台,提供跨平台开发能力,开发人员通过 Xamarin 开发工具与程序语言,即可开发出 iOS、Android 与 Windows 等平台的原生 App 应用程序,不须分别使用各自平台的开发工具与程序语言。...