Bsdiff增量更新实现
来源:互联网 发布:竹书纪年 知乎 编辑:程序博客网 时间:2024/05/16 08:24
- 鸿大《Android 增量更新完全解析 是增量不是热修复》
- wzben《呕心沥血Android studio使用JNI实例》
本来还想跟着鸿大的脚步,尝试自己编译Bsdiff的,无奈自己用的Win10,也没搭建Ubuntu虚拟机,网上搜索无果只能找了别人编译好的。
Demo
bsdiff4.3 + bzip2 + 编译好的bsdiff4.3-win32
一句话原理解析:对比新旧apk生成二进制差异文件patch(就是增量文件),app拿到patch文件后和已经安装在系统里的apk文件合并,然后执行安装。
原理都好简单,但是自己实现就难。但有几点要注意的:
- 新旧apk签名要一致
- 新apk版本要增加
- 最好生成最近几个版本增量文件,每个版本下载对应的去做增量更新(毕竟保证不了客户都在用最新版本)
- 版本差异太大/版本太久远,直接整包更新
一、下载NDK&搭建环境
用Android Studio还是挺方便的,选择相关插件下载安装就配置好了NDK开发环境。用的是Studio 2.2.1版本,新旧版本可能步骤有所不一样。
1、打开Studio>Settings>Android SDK;
2、在右边切换到SDK Tools面板;
3、勾选CMake、LLDB、NDK这三项;
4、点击Apply按钮,接着点击弹窗的OK按钮,然后等着下载安装完就Ok了。
二、新建项目,做下Gradle配置
1、新建项目就不用说了,可以不勾选Include C++ Support(第一个坑就是勾选了这个,文末再说);
2、在Project的gradle.properties文件下配置
android.useDeprecatedNdk=true
3、在Module下的build.gradle文件的android>defaultConfig节点里配置
android { // ... defaultConfig { // ... // 增量更新 ndk { // 指定so库名称 moduleName = 'bsdiff' // 指定支持的cpu架构类型 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' } }}
三、抒写代码
1、先把下载好的bsdiff压缩包里的bspatch.c拷贝到Module的src/main/jni目录下;
2、继续把下载好的bzip2压缩包里的所有.c和.h文件拷贝到Module的src/main/jni目录下(建议拷贝Demo里的文件,不然待会编译出错Error:(70) multiple definition of main
要删掉报错文件里的所有main方法);
3、新建一个类,并声明一个native方法(包名、方法名很重要);
4、修改bspatch.c文件,提供native方法供java调用;
5、然后调用native方法bspatch,传入旧apk的所在路径、合并后新apk的保存路径、增量文件patch的所在路径;
6、最后运行不报错不闪退就可以了,拿着新apk去安装就行了,安装失败/提示解析包失败错误等等等的,一般是用来生成增量文件patch的旧apk和已安装的apk不一致导致的;
- 编译好后,生成的.so文件在如下目录下,可以直接拿到项目里用了。
写在最后
第一次接触JNI,掉坑里不少,不过这次主要学习的内容是Bsdiff增量更新,就没深入了解JNI,顺便简单的记录下印象深刻的坑。
1、上面二.1说的坑,就是要把/src/main/jni目录下的所有.c文件添加到Module根目录下的CMakeLists.txt文件里,不然编译会报错找不到相关函数方法
2、如果还有什么报错之类的,肯定是我给忘了~折腾了一天…
- Bsdiff增量更新实现
- Android 增量更新 bsdiff bspatch
- Android 增量更新 bsdiff bspatch
- android 增量更新 bsdiff\bspatch库编译
- Android增量更新——bsdiff&bspatch
- APK使用bzip2、bsdiff实现增量升级
- android bsdiff 增量升级更新 热补丁 hotpatch(一)
- 增量更新:bsdiff工具的安装和使用
- NDK学习之增量更新--编译bsdiff得到差分包
- Unity增量更新BsDiff(也适用于整包的增量更新)
- 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端&客户端
- Android 增量更新 -- 客户端bsdiff库的编译及jni调用
- android实现增量更新
- android实现app增量更新
- Hive中实现增量更新
- APP增量更新的实现
- Hive中实现增量更新
- 实现android的增量更新
- Android干货框架集锦,搭建项目必不可少
- C++ Primer(第五版)练习6.21
- 如何将图片转换成一个PDF格式文档
- intellij IDEA切换主干/分支
- javascript返回字符串字节长度
- Bsdiff增量更新实现
- 基于TCP和UDP的Socket编程事例代码
- 浅谈HTTPS以及Fiddler抓取HTTPS协议
- SLAM cartographer
- SVN 创建分支
- 08练习
- HTML第八章上机练习1
- RabbitMQ高可用性集群镜像实施方案
- 21. Merge Two Sorted Lists