http://kinggoo.com/bsdiffupdate.htm
Android增量升级这东西很不错,当时我们这运营的人把百度的一个管理软件拿过来说他们这个升级包提示可以节省流量是怎么回事,当时各种猜测,难道是有什么特殊算法将包压缩了?特意试了一下压缩,根本大小就没变化~后来开发的人找到是增量升级,文章抛给我研究下。拿过来后发现如果单纯的用命令处理真的很简单,当时想法也是很简单,就是让开发把bspatch这个命令内嵌到Apk包里,反正它不大,但后来我在Android模拟器里试了一下,发现根本不行,在继续看参考的那篇文章,发现下面还有,c++这部分要弄成so包,然后在通过javah 去生成一个中间的class才能执行bspatch(另一个开发研究的,在参考的那篇文章里也有这个处理方法)
bsdiff网站:http://www.daemonology.net/bsdiff/
下载bsdiff: 百度网盘
windows:
http://sites.inka.de/tesla/download/bsdiff4.3-win32.zip (32bit)
http://sites.inka.de/tesla/download/bsdiff4.3-win32-src.zip (32bit)
linux:
http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz
执行
tar -zxvf bsdiff-4.3.tar.gz cd bsdiff-4.3
编辑Makefile,因为编译器的问题多数编译会出问题(Makefile:13: *** 遗漏分隔符 。 停止。)
原因是:目标体下一行的,命令要用TAB键开头,且不能隔一行。
也就是说在.ifndef的前面要有TAB开头才可以~因为他是安装的下一个子集命令。
修改文件为:
[root@kinggoo.com bsdiff-4.3]# cat Makefile CFLAGS +=-O3 -lbz2 PREFIX ?=/usr/local INSTALL_PROGRAM ?= ${INSTALL}-c -s -m 555 INSTALL_MAN ?= ${INSTALL}-c -m 444 all: bsdiff bspatch bsdiff: bsdiff.c bspatch: bspatch.c install: ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin .ifndef WITHOUT_MAN ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1 .endif
开始编译安装bsdiff和bspatch
[root@kinggoo.com bsdiff-4.3]# make [root@kinggoo.com bsdiff-4.3]# ls bsdiff bsdiff.1 bsdiff.c bspatch bspatch.1 bspatch.c Makefile
好了,我们要得到的两个文件bsdiff、bspatch都有了
由于测试一下,所以我就直接传到这台机器上两个apk文件,名为v1.1.apk、v1.0.apk
先来看下当前文件夹内文件信息(因为是测试,所以是直接在bsdiff源码目录下直接操作的)
注意一下,那两个apk文件的大小
[root@kinggoo.com bsdiff-4.3]# ls -l 总计11260-rwxr-xr-x 1 root root 1410205-2814:25 bsdiff -rw-r--r--11001100222262005-08-17 bsdiff.1-rw-r--r--110011002101072005-08-17 bsdiff.c -rwxr-xr-x 1 root root 1146305-2814:25 bspatch -rw-r--r--11001100220382005-08-17 bspatch.1-rw-r--r--11001100259962005-08-17 bspatch.c -rw-r--r--11001100232405-2814:25Makefile-rwxr-xr-x 1 root root 380533105-2814:53 v1.0.apk-rwxr-xr-x 1 root root 374050405-2814:53 v1.1.apk
v1.0.apk大小3805331(3.8M)
v1.1.apk大小3740504(3.7M)
由于1.1有版本优化,所以反而小了。不用管他,执行如下操作:
[root@kinggoo.com bsdiff-4.3]#./bsdiff v1.0.apk v1.1.apk diff.patch
格式: bsdiff 上一版本apk包 本版本 对比增量差异部分
通过ls -l查看发现多出 diff.patch文件,大小为1842353(1.8M),用户也就只需要下载这1.8M大小的增量包即可
在使用bspatch,将其增量部分与上一版本包合成
[root@kinggoo.com bsdiff-4.3]#./bspatch v1.0.apk v1.1_diff_patch.apk ./diff.patch
对合成升级版本的apk包及最新版本apk包进行MD5、SHA1效验
md5效验
[root@kinggoo.com bsdiff-4.3]# md5sum v1.1_diff_patch.apk #合成包 a7d9af832a5e546e3fdce2d1b29c930e v1.1_diff_patch.apk [root@kinggoo.com bsdiff-4.3]# md5sum v1.1.apk#原始升级包 a7d9af832a5e546e3fdce2d1b29c930e v1.1.apk
sha1效验
[root@kinggoo.com bsdiff-4.3]# sha1sum v1.1_diff_patch.apk 94fe99bc40bab8908bccce70aa6a68c5a4fd11b1 v1.1_diff_patch.apk [root@kinggoo.com bsdiff-4.3]# sha1sum v1.1.apk94fe99bc40bab8908bccce70aa6a68c5a4fd11b1 v1.1.apk
以上均无问题
最后将合成包安装到2.3.3系统上是没有任何问题!
下步是生成给android应用内调用的.so包,下篇文章会介绍,暂时没时间。
参考资料:
http://blog.csdn.net/hmg25
在这个人写的文章里,看到说有Courgette,更牛,到官网上看发现能达到几倍的压缩率 (http://www.oschina.net/code/explore/chromium.r67069/courgette 这里应该是开源出来的代码吧)
相关推荐
在Android应用开发中,增量升级是一种优化用户更新体验的技术,它允许APP仅下载与旧版本不同的部分,而非整个新版本的APK。这种方式显著减少了数据消耗,缩短了更新时间,提高了用户体验。本文将深入探讨Android APP...
Google已经认识到不断更新应用对用户流量的影响,并在Google I/O开发者大会中提出了mart Appupdate,即应用增量升级的概念,也称作差分升级。 增量升级的实现原理包括以下步骤: 1. 生成补丁:对旧版本的APK...
增量升级在Android应用开发中是一项重要的技术,它允许用户只下载和安装应用更新中的新部分,而不是整个APK文件,从而显著减少数据消耗和升级时间。这种技术对于大型应用尤其有益,因为它提高了用户体验,减少了用户...
在Android平台上,应用的自动升级更新是提升用户体验和确保软件安全的重要机制。它允许开发者发布新版本的应用,并在用户设备上无缝地进行更新,无需用户手动干预。本篇将深入探讨这一过程,涵盖其原理、实现方法...
在Android系统中,每个应用程序都有一个独一无二的包名(Package Name),它在应用程序的清单文件(AndroidManifest.xml)中定义。包名起到了标识符的作用,使得系统能够区分不同的应用。本示例“android 通过应用包...
在Android开发中,增量升级是一种优化用户更新应用的策略,它可以显著减少下载的数据量,提高用户体验。本DEMO主要展示了如何实现Android应用的增量更新功能。增量升级的基本思想是只下载自上次版本以来更改的部分,...
在Android应用开发中,实现应用内部更新和版本升级是一项重要的功能。这允许开发者在发布新版本时,确保用户能够及时获得最新的修复、功能和优化,提高用户体验。在本教程中,我们将深入探讨如何在Android应用中集成...
在Android应用开发中,版本升级是一项重要的功能,它能让用户无缝地从旧版本过渡到新版本,提升用户体验。本示例“android应用下载安装apk升级版本实现demo适配Android10”聚焦于如何在Android 10(API级别29)及更...
Android app 增量更新 参考https://github.com/cundong/SmartAppUpdates 该app未提供服务端代码(服务端代码的增量更新实现可参考diff.c和patch.c,原理和客户端一致) ScreenShoots Gradle compile '...
ReadMe:需要有生成差分patch的文件,与旧apk进行合并。生成差分包的patch方法可以如下列出的"参考文档"。Install bsdiff for Ubuntu:... 下载地址: ... 参考文档: ...
Android APP 开发入门教程 Android APP 开发入门教程主要介绍了 Android APP 的开发流程,从 SDK 下载、开发环境搭建、代码编写、APP 打包等步骤一一讲解。本教程通过实践操作,带领读者一步步完成 Android APP 的...
在Android应用开发中,为了提高用户的更新体验和减少下载数据量,开发者通常会采用增量包或差量包的方式来更新应用程序。增量包(delta package)是一种只包含应用更新部分的APK,它相比于完整APK,仅包含从旧版本到...
从提供的标题"Android App应用市场源码"和描述中,我们可以提炼出以下几个关键知识点: 1. **保护滑动加载**:这是移动应用中常见的用户体验优化技术,主要用于提高用户在浏览应用列表时的流畅性。通常采用ListView...
使用Android Studio 4.1.1 开发的 自带升级功能的APP。本APP已经实现了支持Android5~11的适配,可以完美运行在Android5~11上。另外,本APP实现了在APP上通过RestAPI访问远程数据库功能,可以给初学者作为参考样例。
以下是对“Android 查看app包名”这一主题的详细解释。 首先,我们要理解什么是包名。在Android开发中,每个应用都有一个唯一的包名(package name),它是基于域名逆序规则创建的,例如`com.example.myapp`。这个...
在Android应用开发中,自动升级功能是一个非常重要的组成部分,它能确保用户始终使用最新、最安全的软件版本。"android app自动升级demo"是一个实践示例,它演示了如何实现这个功能。以下将详细讲解自动升级的核心...
本教程将探讨Android应用的升级机制,以及如何实现一个简单的APP升级Demo。我们将关注以下几个核心知识点: 1. **APK文件与版本管理**: APK是Android应用程序的安装包,类似于其他操作系统中的可执行文件。每个...
本示例将向您展示如何在代码层面实现Android App的升级功能,这将帮助开发者更方便地集成到自己的项目中。提供的资源包括一个GitHub上的开源库`CheckVersionLib`以及一个自编写的实现,两者都是为了实现检查并提示...
Android OTA(Over-the-Air)在线升级是一种便捷的设备系统更新方式,允许用户通过网络下载升级包来更新手机或平板电脑的操作系统。这种方式无需通过电脑或其他物理媒介,大大简化了更新流程,提高了用户体验。在本...