本文demo和参考例子参考-传送  门:http://blog.csdn.net/duguang77/article/details/17676797

一.增量更新优点:节省客户端和服务器端流量

增量更新和热修复是不同的两个技术

学习要求:学会jni相关操作,例如androidstudio如何生成和应用.so文件

这里有.so文件的生成和应用的简单介绍  http://www.cnblogs.com/mrszhou/p/6859137.html

二.增量更新原理-APK的查分合成

差分包:比如old.apk(大小是4M)要升级到new.apk(大小是10M),在服务器(或者手动生成old-new.patch(差分包的大小是6M)

开源工具

    bsdiff下载http://www.daemonology.net/bsdiff/ 
    bzip2下载http://www.bzip.org/downloads.html

bsdiff:

bsdiff.c      二进制比较代码生成差分包.patch用的  在命令窗口生成patch用的命令 ./bsdiff old.apk new.apk old-to-new.patch

bspatch.c   二进制文件合成代码合成新apk用的   在命令窗口合成新apk用的命令./bspatch old.apk new2.apk old-to-new.patch

bzip2:放到客户端的jni包里面的文件有以下13个:

     blocksort.c   bzip2.c   bzip2recover.c  bzlib_private.h  bzlib.c  bzlib.h  compress.c  crctable.c   decompress.c   dlltest.c  huffman.c  randtable.c   spewG.c

在生成.so文件的时候可能报错:Error:(70) multiple definition of `main'

这时候把报错的main函数的名字改成main1,main2等等就行了

1.在服务端生成新旧apk的差分包

(注意:要生成每个旧版本和新版本的差分包,根据客户端传过来该客户端当前的VersionCode来查找服务端是否有该版本和新客户端的差分包,

  如果没有的话就生成差分包)

例如:

1.0->4.0  生成1.0和4.0的差分包;

2.0->4.0  生成2.0到4.0的差分包

2.在客户端使用已经安装的旧版apk,使用已安装的旧版apk和old-new.patch合成新apk

3.对比合成的apk的签名、md5是否一样,一样的话就能提示安装

三.客户端实现

服务端上面传送门有demo例子下载

客户端:按照http://www.cnblogs.com/mrszhou/p/6859137.html这里生成jni包内的example.h文件,再复制.h文件到jni包里面,改文件类型为example.c   文件

并在该文件的native函数内编写

JNIEXPORT jint JNICALL Java_service_update_app_myzenglianupdate_MainActivity_zengliangu
(JNIEnv* env,object othis, jstring argv1, jstring argv2, jstring argv3){
char ** argv;
int loopVar,result; //__android_log_print(ANDROID_LOG_INFO, "bspatch.c", "开始打包之。。。。。。");
argv = (char**) malloc( * sizeof(char*));
for (loopVar = ; loopVar < ; loopVar++) {
argv[loopVar] = (char*) malloc( * sizeof(char));
}
argv[] = "bspatch";
argv[] = (*env)->GetStringUTFChars(env, argv1, );
argv[] = (*env)->GetStringUTFChars(env, argv2, );
argv[] = (*env)->GetStringUTFChars(env, argv3, ); result=bspatch(argv); //Important:释放内存,防止内存泄露
(*env)->ReleaseStringUTFChars(env, argv1, argv[]);
(*env)->ReleaseStringUTFChars(env, argv2, argv[]);
(*env)->ReleaseStringUTFChars(env, argv3, argv[]);
return result; };

然后在app/src/mian内新建jniLibs包,在包生成的.so文件拖进去

这些步骤是在前人的例子里自己亲自学习过程中,.so文件的生成和NDK的版本,报错很多,基本生成.so文件后面的就简单很多

androidstudio实现增量更新步骤的更多相关文章

  1. jenkins增量更新及重启服务步骤

    jenkins增量更新步骤:(以creditsys_service_tomcat为例) 1.SecureCRT 或者Xshell 连接服务器192.168.*.*,账号:test/**** 2.cd ...

  2. android studio增量更新

    一.概述 1.1 概念 增量更新即是通过比较 本机安装版本 和 想要安装版本 间的差异,产生一个差异安装包,不需要从官网下载并安装全量安装包,更不需要将本机已安装的版本下载,而仅仅只是安装此差异安装包 ...

  3. Kettle中通过触发器方式实现数据 增量更新

    在使用Kettle进行数据同步的时候, 共有 1.使用时间戳进行数据增量更新 2.使用数据库日志进行数据增量更新 3.使用触发器+快照表 进行数据增量更新 今天要介绍的是第3中方法. 实验的思路是这样 ...

  4. odi增量更新策略

    增量更新策略:通过一个“update key”比较流数据记录与目标表中的记录比较进行数据整合.具有相同“update key”的记录当相关联列不同时将被更新:在目标表中不存在的记录将被插入.这种方式用 ...

  5. Android Apk增量更新

    前言 有关APK更新的技术比较多,例如:增量更新.插件式开发.热修复.RN.静默安装. 下面简单介绍一下: 什么是增量更新?   增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样. 与 ...

  6. Elasticsearch系列---增量更新原理及优势

    概要 本篇主要介绍增量更新(partial update,也叫局部更新)的核心原理,介绍6.3.1版本的Elasticsearch脚本使用实例和增量更新的优势. 增量更新过程与原理 简单回顾 前文我们 ...

  7. NDK学习笔记-增量更新

    虽然现在有插件化开发和热修复,但为何还需要增量更新?插件化开发和热修复依赖于宿主程序,增量更新适合更新宿主程序. 差分包生成的前提 差分包的生成依赖于BsDiff开源项目,而BsDiff又依赖于Bzi ...

  8. Android 增量更新完全解析 是增量不是热修复(转)

    转自:http://blog.csdn.net/lmj623565791/article/details/52761658 本文在我的微信公众号:鸿洋(hongyangAndroid)首发. 转载请标 ...

  9. 谈谈混合 App Web 资源的打包与增量更新

    综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...

随机推荐

  1. LoadRunner如何调用外部函数

    LoadRunner如何调用外部函数 使用 VuGen 时,可以调用在外部 DLL 中定义的函数.通过从脚本调用外部函数,可以降低脚本的内存使用量以及总体运行时间.要调用外部函数,需要加载定义了该函数 ...

  2. postgresql数据库安装后的pgadmin4切换中文

    如图所示

  3. 关于将ECharts引入到项目中的几种方式

    方式一.在webpack中使用ECharts 1.npm安装ECharts npm install echarts --save 2.引入ECharts 通过 npm 上安装的 ECharts 和 z ...

  4. opencv-访问Mat中每个像素的值

    参考:[OpenCV]访问Mat中每个像素的值(新)   膜拜大佬 以下例子代码均针对8位单通道灰度图. 1 .ptr和[]操作符 Mat最直接的访问方法是通过.ptr<>函数得到一行的指 ...

  5. 关于 ros

    1.https://mikrotik.com/download   下载 x86 架构的 cd image  (当日这是试用版,特殊版下载后道理一样) 2.exsi 上传,并新建 linux 的 其他 ...

  6. Cesium官方教程8-- 几何体和外观效果

    原文地址:https://cesiumjs.org/tutorials/Geometry-and-Appearances/ 几何体和外观效果(Geometry and Appearances) 这篇教 ...

  7. PAT甲级——A1096 Consecutive Factors【20】

    Among all the factors of a positive integer N, there may exist several consecutive numbers. For exam ...

  8. selenium简单应用

    文章引用自:https://wenku.baidu.com/view/d5c296c75727a5e9846a6182.html 例子:

  9. Apache Pig入门学习文档(一)

    1,Pig的安装    (一)软件要求    (二)下载Pig      (三)编译Pig 2,运行Pig    (一)Pig的所有执行模式    (二)pig的交互式模式    (三)使用pig脚本 ...

  10. HLog工作原理