移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力。说的接地气点就是,你频繁的升级更新,有时只是修复了几个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
本文链接:http://my.oschina.net/jack1900/blog/301330
相关推荐
在Android应用开发中,增量升级是一种优化用户更新体验的技术,它允许APP仅下载与旧版本不同的部分,而非整个新版本的APK。这种方式显著减少了数据消耗,缩短了更新时间,提高了用户体验。本文将深入探讨Android APP...
在Android增量更新中,开发者通常会使用bsdiff来计算新旧APK的差异,然后将这个补丁文件发送给用户。bsdiff的使用步骤可能包括: - 编译或获取bsdiff工具。 - 对比新旧APK,生成补丁文件(如:old.apk -> new.apk...
1. 生成补丁:对旧版本的APK(Android应用安装包)和新版本的APK进行差分处理,生成只包含更新部分的补丁包。 2. 用户下载补丁:用户仅需下载这个补丁包。 3. 组合更新:在用户的移动设备上,将补丁包和设备上已有的...
在Android应用开发中,自动更新功能是至关重要的,它能够帮助开发者及时推送修复补丁、新功能和优化,确保用户始终使用的是最新版本的应用。本文将深入探讨如何实现Android的自动更新机制,包括apk检测更新和jar包...
5. **更新与补丁**:及时更新系统和App,修补已知的安全漏洞,降低被攻击的风险。 6. **用户教育**:提高用户的网络安全意识,提醒用户谨慎使用公共Wi-Fi,不随便点击来源不明的链接或下载未知应用。 总结来说,...
这是一个基于Android的DroidFix项目,使用Java语言开发,包含100个文件。...该项目实现了安卓App的热补丁动态修复技术,能够在不重新安装应用的情况下修复应用中的问题,提高了应用的稳定性和可维护性。
2. **更新策略**:尽管这是旧版SDK,但仍然需要关注官方发布的安全更新和补丁,以保持应用的安全性和稳定性。 3. **文档查阅**:查阅Uniapp官方文档,了解该版本SDK的具体功能和限制,以便充分利用其特性。 4. **...
在Android操作系统中,"app2sd"是一种技术,允许用户将应用程序的数据和缓存移动到外部SD卡上,以缓解手机内部存储空间的压力。这里我们聚焦于华为C8500手机,它运行的是Android 2.1系统,这是一个相对较早的版本。...
同时,随着AAB(Android App Bundle)的推广,未来增量更新可能会变得更加智能和自动化。 总结,Android增量更新工具包是优化应用更新流程的关键工具,它通过生成差分包来减少用户下载的大小,提高了更新速度和效率...
这可以帮助开发者理解如何在自己的项目中实现热补丁功能,例如设置补丁更新检查逻辑、处理补丁加载异常等。 “下载更多打包源码~.url”可能是一个链接,指向更多的Android应用源码示例,这些示例可能已经集成了...
现在Android热修复的技术已经很成熟了,大量的app都在接入这一块,这个项目就是为了解决补丁管理的需求,提供一个补丁管理平台和api服务还有客户端的集成sdk,支持按版本下发补丁、灰度发布、全量发布、机型黑名单...
在Android环境中,开发者可以使用这个工具来对比旧版本的APK和新版本的APK,生成一个补丁文件,然后在客户端通过这个补丁更新应用。`bsdiff-4.3-win32-已编译`表明这是针对Windows 32位系统的预编译版本,方便在...
总结来说,Android差分升级工具abspatch基于bsdiff和bspatch,通过计算和应用补丁文件,实现了高效且节省资源的Android应用更新。这一技术对于移动设备用户来说非常有益,因为它减少了升级所需的时间和数据消耗,...
由于国内的安卓设备开发的环境限制,安卓移动设备如安卓盒子,安卓TV车载设备等,搭载了goole app等套装的时候,在使用中goole play store可能会自动更新,导致出现无法使用的情况,最好是在framework层将其安装更新...
在Android应用开发中,消息推送是一项关键功能,它能让开发者实时地向用户发送通知或更新信息,提升用户体验和应用活跃度。"android安卓app开发之亲测能用的APP消息推送例子源码_棒.zip" 提供的资源显然是一个关于...
【Android APP功能插件化机制】是指在Android应用程序中实现模块化、动态加载的技术,它允许应用程序在不更新整个APK的情况下添加新功能或修复已存在的问题。这种机制基于动态加载技术,使得APK能够根据需要加载或...
实现霸屏模式一般涉及修改AndroidManifest.xml文件中的权限设置,例如添加`android:resizeableActivity="false"`和`android:supportsRtl="false"`属性,以及调整Activity的启动主题。文件"0001-Add-screen-mode-and-...
简单易使用,主要包含差分包的升成和何必,只要将代码中旧版本、新版本和差分包路径填好即可, ...//补丁(差分包路径) private String complexapk = "mnt/sdcard/newapk.apk";//合成的apk路径 后续会有相应详细说明
5. **刷入新系统**:将编译好的新系统镜像烧录到设备的存储中,通常通过Fastboot或OTA更新来完成。 6. **测试验证**:重启设备并检查修复是否成功,尝试安装一个第三方应用,看其是否能在开机时正常接收到广播。 ...
ALPS04929698补丁用于解决android.appsecurity.cts.AdoptableHostTest#testEjected,google的GMS认证会用到android 9.0和android 10.0都有这个报错