JNI开发 怒撸一个 增量更新


这篇文章需要会以下:

增量更新大体流程

  1. 客户端发送更新请求
  2. 服务端生成差分包(生成差分包是动态生成的 而不是已经生成好的)
  3. 客户端下载差分包并且与旧的 apk 合并成最新的 apk
  4. 最后安装

那么问题来了

  • 差分包怎么生成的
  • 每次请求都生成差分包 效率呢
  • 旧的 apk 怎么与差分包合并生成新的 apk 
  • 旧版本的 apk 从哪里来(服务器下载肯定不可能 本地的要是被删了呢)

  •  差分包怎么生成的
            差分包的生成跟新 apk 的合并都是用到 bzip2 这个项目。

  • 每次请求都生成差分包效率问题
          差分包可以定期缓存在服务器 
  • 旧版本apk从哪里来

           apk 安装的时候手机系统会复制一个份 apk 到手机的系统的 data/app/包名-1/base.apk 目录下这个目录可以调用

   ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(packageName,0);

 
 

String oldFilePath = appInfo.sourceDir

  • 如果用户 root 了手机 手贱贱的删了这个apk呢

          这时候只能特殊情况特殊处理 从服务端下载最新版本

Linux 下生成差分文件

  1. diffsrc 文件复制到 Linux 系统下生成可执行文件。(cd 到文件目录 执行生成可执行文件的命令 : gcc -fPIC blocksort.c bsdiff.c bzlib.c compress.c crctable.c decompress.c huffman.c randtable.c -o testDiff 生成在 Linux 系统下的可执行文件 testDiff )
  2. 复制 新/旧版本的 apk 到相同目录下。
  3. 执行可执行文件 testDiff (执行命令 ./testDiff apkOld.apk apkNew.apk test.patch  apkOld.apk apkNew.apk是自己文件的文件名)
  4. 最后没有错的话就生成了差分包 test.patch .

在安卓项目里将差分包跟旧的 apk 合并生成最新版 apk。

  1.  在自己安卓项目目录的 src/main 下面新建一个文件夹 cpp,将上面的 diffsrc 下的文件  拷贝到 cpp目录下
  2.   配置 CMakeList.txt  (配置所有 c 文件的路径 跟库的名字 )
  3. 安卓项目里写 native 方法( 记得加载库文件 第二步配置的库: System.loadLibarary("bzip")
  4. bspatch.c 实现 native 方法并调用 bspatch 的合并方法。
  5. 合并完成后安装

至于服务端写更新接口生成差分包、服务器缓存差分文件、表示我也不会。

 




猜你喜欢

转载自blog.csdn.net/u013171212/article/details/78247493