本文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. thinkone无法重新创建数据库的问题 newsy

    错误描述: 无法加载数据库驱动: Think\Db\Driver\    前后装了OneThink1.0和OneThink1.1都没成功,都是卡在了安装页面的三个step,读者们你们也遇到一样的情况吗 ...

  2. minutia cylinder code MCC lSSR 匹配算法

    图一 是LSS匹配算法, 图二是LSSR 匹配算法,数据采用MCC SDK自带的十个人的数据.LSS EER6.0%左右,LSSR EER 0%

  3. 对倾斜的图像进行修正——基于opencv 透视变换

    这篇文章主要解决这样一个问题: 有一张倾斜了的图片(当然是在Z轴上也有倾斜,不然直接旋转得了o(╯□╰)o),如何尽量将它纠正到端正的状态. 而要解决这样一个问题,可以用到透视变换. 关于透视变换的原 ...

  4. Android开发 Tablayout的学习

    前言 Tablayout一般做主页底下的导航栏开发或者上面的选择栏开发,就个人感觉Tablayout用于主页导航栏会比BottomNavigationView更好,自定义方面也更容易.缺点是没有动画也 ...

  5. lync sdk 二次开发

    1.关于 UI Suppression Mode http://blog.thoughtstuff.co.uk/2014/08/the-6-things-you-need-to-know-about- ...

  6. [JZOJ3168] 【GDOI2013模拟3】踢足球

    题目 描述 题目大意 有两个队伍,每个队伍各nnn人. 接到球的某个人会再下一刻随机地传给自己人.敌人和射门,射门有概率会中. 每次射门之后球权在对方111号选手. 某个队伍到了RRR分,或者总时间到 ...

  7. 介绍一下再Apache下的Tomcat负载均衡的一些使用问题

    在负载均衡技术中,硬件设备是比较昂贵的,对于负载均衡的学习者如果不是在企业中应用或者是学员中学习,很少有机会能碰到实际操作的训练.(http://xz.8682222.com)所以,很多朋友都会选择软 ...

  8. CPU的load和使用率傻傻分不清(转)

    转自: https://www.cnblogs.com/yunxizhujing/p/9382396.html 1. 什么是Cpu的Load 使用uptime.top或者查看/proc/loadavg ...

  9. yii2-user 一个好用的用户扩展

    最近使用yii2做了一个系统,涉及到了用户登录等等,之前是自己写的一套,后来要添加邮箱验证功能.有点懒,然后看到了yii2-user这个扩展.简单说下,毕竟自己研究也不深. http://yii2-u ...

  10. DataSourceUtils(加入线程管理事务)

    第一二见之前的文章: DataSourceUtils(使用C3P0连接池的工具类) 替换第三步: import java.sql.Connection; import java.sql.ResultS ...