type
status
date
slug
summary
tags
category
icon
password
流程
- step1 使用bsdiff生成差异包PATCH.patch
- step2 在手机上合并base包和差异包,生成新版本的安装包
- step3 安装新的安装包
准备
- bsdiff-4.3 (用于生成差异包,合并新包)
- bzip2 (bsdiff要使用到)
试验
- step1 解压bsdiff4.3的压缩包
- step2 修改Makefile文件,将**.ifndef和.endif**缩进,要么无法进行后面的操作
- step3 在该文件夹的命令行里执行make命令,会生成bsdiff和bspatch两个可执行的文件。如果是从上面的地址下载的bsdiff的话,会爆出bspatch.c:39:21: error: unknown type name 'u_char'; did you mean 'char'?这样的错误。这是由于bspatch.c中缺少了#include <sys/types.h> ,加上即可。然后执行make命令。
<!-- more -->
- step4 准备两个同一签名的apk,old.apk和*.apk*,放在bsdiff-4.3解压后的文件夹里。
- step5 使用bsdiff生成差异文件PATCH.patch,命令格式:bsdiff oldfile newfile patchfile(这一步操作可以放在服务端来执行)
- step6 使用bspatch合成新的apk,dest.apk。命令格式:bspatch oldfile newfile patchfile
- step7 验证生成的dest.apk和之前的new.apk使用一样,验证两个apk的md5值,即可。
在Android中使用增量更新
ndk部分
- step1 新建一个PatchUtils的类,用于调用native的方法
- step2 使用javah命令生成PatchUtils的头文件,或者使用ndk-build里的javah生成头文件。会在jni文件夹下生成一个com_bigademo_updatedemo_PatchUtils.h的文件,其中com_bigademo_updatedemo是我的包名。
- step3 将bsdiff4.3文件夹中的bspatch.c文件导入到jni文件夹下。
- step4 将bzip2文件夹导入到jni文件夹下
- step5 删除bzip2中的除了以c和h结尾的其他文件。 如图:
- step6 修改bspatch.c。引入bzip的文件,引入com_bigademo_updatedemo_PatchUtils.h,在bspatch.c中重写JNIEXPORT jint JNICALL Java_com_bigademo_updatedemo_PatchUtils_bspatch方法。代码如下
- step7 在jni下创建Android.mk和Application.mk两个文件
- step8 在module中的build.gradle中配置ndk。
java部分
创建一个ApkExtract类,用于获取当前app的apk和安装新的apk。因为涉及到Android 7.0的,需要处理Provider的问题,同时在AndroidManifest.xml增加一些代码
androidmanifest.xml
最后在需要更新的时候调用下面这个方法,当然先做一下动态调用读写权限的操作。
- 作者:Tony
- 链接:https://bigademo.com/article/d4ef393e-8092-4732-8084-3a44ed37fee4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章