美文网首页
NDK 增量更新

NDK 增量更新

作者: Kingsley_Wu | 来源:发表于2017-09-19 01:10 被阅读42次

处理流程:

  1. 将应用的旧版本Apk与新版本Apk做差分,得到差分包(更新补丁) xxx.datch;
  2. 在用户下载了差分包后,在手机端组合起来;
  3. 校验新合成的Apk文件是否完整,MD5或SHA1是否正确,正确则引导用户安装

工具

  1. 服务器端: 利用bsdiff得到差分包(更新补丁)
    cmd命令格式:
    file.../bsdiff 旧版本apk包 新版本apk包 差分包.patch
  2. 电脑:
    cmd命令格式:
    file.../bspatch 旧版本apk包 新版本apk包 差分包.patch
  3. 手机端: 利用JNI合成完整apk

1. 生成so文件

  • 注:
    模拟器:x86 & x86_64
    真机: armeabi & armeabi-v7a & armeabi-v8a ...
  1. 在GitHub找到SmartAppUpdates,在ApkPatchLibrary/jni 目录下获得c代码;
    https://github.com/cundong/SmartAppUpdates
  2. 在代码中定义native方法,
public class PatchUtils {
    static {
        System.loadLibrary("xxx"); //加载生成的so文件
    }
    public static native int patch(String oldApkPath,String newApkPath,String patchPath);
}

通过javah命令生成相应的.h文件
cmd命令格式:file.../javah 包名.xxx (xxx需为.class文件)

  1. 生成相应的c文件,把ApkPatchLibrary/jin目录下获得c文件进行修改:
    文件名称修改 com_cundong_utils_PatchUtils.c
    修改为 xxx_xxx_xxx_xxx.c
    需修改xxx_xxx_xxx_xxx .c文件夹内的
    18行
  • include "com_cundong_utils_PatchUtils.h"
    改为相对应的 include "xxx_xxx_xxx_xxx.h"
    199行
  • jint JNICALL Java_com_cundong_utils_PatchUtils_patch
    改为xxx_xxx_xxx_xxx.h中15行中相对应的 jint JNICALL xxx_xxx_xxx_xxx_patch
  1. 修改 Android.mk文件
    把:
    LOCAL_MODULE := ApkPatchLibrary
    LOCAL_SRC_FILES := com_cundong_utils_PatchUtils.c
    修改为:
    LOCAL_MODULE := xxx
    LOCAL_SRC_FILES := xxx_xxx_xxx_xxx.c
  • xxx 为在代码中写的xxx System.loadLibrary("xxx");
  • xxx_xxx_xxx_xxx.c 为前面生成的xxx_xxx_xxx_xxx.c文件名
  1. 使用NDK生成so文件
    smd命令格式:
    file.../ndk-build

2. 使用JNI(Android Studio 2.3.3)

  1. 把xxx.so连同父文件夹复制到项目main目录下的jniLibs下 ,然后build项目;
image.png
  1. 把旧版本apk和差分包放到sd卡中:

  2. 现即可在项目中调用之前代码中的native方法了

String oldApkPath = Environment.getExternalStorageDirectory()+"/patchdemo/patchdemo_1.apk";
String newApkPath = Environment.getExternalStorageDirectory()+"/patchdemo/patchdemo_2.apk";
String patchPath = Environment.getExternalStorageDirectory()+"/patchdemo/patchdemo.patch";
//result为0则为成功,否则为失败
int result = PatchUtils.patch(oldApkPath,newApkPath,patchPath);

相关文章

  • NDK—增量更新

    上一节我们学习了NDK来处理文件的拆分和合并操作,那时候我们纯手工来敲C语言的代码,今天我们来用C语言代码搞搞ND...

  • NDK 增量更新

    处理流程: 将应用的旧版本Apk与新版本Apk做差分,得到差分包(更新补丁) xxx.datch; 在用户下载了...

  • NDK开发—增量更新

    1、普通更新和增量更新 首先了解一下应用普通更新的逻辑(这里指不通过应用市场更新):新版本发布后将APK文件上传到...

  • 一、NDK:增量更新

    增量更新在Android开发中是一种很常见的技术。 增量更新的原理 增量更新的原理非常简单,就是将本地apk与服务...

  • Android NDK开发之旅17--NDK--Apk增量更新

    Android NDK开发之旅 目录 前言 有关APK更新的技术比较多,例如:增量更新、插件式开发、热修复、RN、...

  • NDK开发基础④增量更新之客户端合并差分包

    接续上篇NDK开发基础③增量更新之服务器端生成差分包 前情提要 增量更新原理就是在服务器端使用bsdiff进行文件...

  • NDK开发:增量更新原理

    现在国内主流的应用市场也都支持应用的增量更新了。 增量更新的原理,就是将手机上已安装apk与服务器端最新apk进行...

  • NDK—C++命名空间和引用

    随着NDK的增量更新的学习,NDK也要结束了,今天我们开始新的内容那就是C++,相对于C,C++带来了更多的操作这...

  • Android NDK开发-APK增量更新

    概述 现在的APP更新频率非常高,apk的大小也在不断的变大。如果每次新版本的更新,都让用户去下载一个完整的apk...

  • Android高级开发:解析NDK增量更新

    最近朋友跟我分享一个技巧,就是NDK增量更新,今天给大家分享一下这个技巧; 同时,在给大家分享之前,这里推荐下我自...

网友评论

      本文标题:NDK 增量更新

      本文链接:https://www.haomeiwen.com/subject/mcdisxtx.html