bsdiff的网址 http://www.daemonology.net/bsdiff/ 。
在MacOS上可以使用命令 brew install bsdiff 直接安装,其它平台从上面网址下载后自行编译。或者直接搜索下载可用程序。
一.开发第一版apk
第一版app就须要有增量更新的功能。
这里使用一个github上的开源项目 https://github.com/ha-excited/BigNews 。
1.项目的build.gradle
1 2 3 4 5 6 7 8 |
allprojects { repositories { google() jcenter() maven { url 'https://jitpack.io' } } } |
2.app模块的build.gradle
1 2 |
implementation 'com.github.ha-excited:BigNews:0.1.2' |
3.增量更新代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
private void update() { ApplicationInfo info = getApplicationInfo(); String oldApkPath = info.sourceDir; // 当前安装的正在运行app的apk路径 String newApkPath = Constant.PATH_NEW_APK; // 执行增量更新后生成的即将安装的新apk路径 Log.e("ard", "备份apk路径:" + oldApkPath); String pathApkPath = Constant.PATH_PATH_APK; // 差分包apk的路径。这个apk一般是启动程序时从网络下载 boolean make = BigNews.make(oldApkPath, newApkPath, Constant.PATH_PATH_APK); // 比对当前app和差分包,判断是否需要升级 Log.e("ard", "新版apk合并:" + make); vTextView.setText("老版本:" + oldApkPath + ",合并差分:" + make); Toast.makeText(this, "更新:" + make, Toast.LENGTH_SHORT).show(); if (make) { // 如果true,则newApkPath是有效的,执行升级安装 install(newApkPath); } } private void install(String filePath) { File apkFile = new File(filePath); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); startActivity(intent); } |
二.开发第二版apk
当然第二版是保留差分升级功能的。
三.生成差分包
使用bsdiff指令生成升级包apk。如:
bsdiff A1.apk B2.apk diff.apk
即比对第一版a1和新版b2两个apk,生成差分升级包diff.apk。
四.测试
启动第一版apk,执行update方法,首先拿到差分包pathApkPath,比对当前版本的apk,生成newapk,启动安装。
五.弊端
摘自 https://www.cnblogs.com/zijianlu/p/4829953.html 。
1)增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。
2)增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好在补丁合成前对旧版本的apk进行sha1sum校验,保证基础包的一致性。
六.其它
https://blog.csdn.net/shangyexin/article/details/82885583
end
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/2272.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设