androidstudio实现增量更新步骤
本文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实现增量更新步骤的更多相关文章
- jenkins增量更新及重启服务步骤
jenkins增量更新步骤:(以creditsys_service_tomcat为例) 1.SecureCRT 或者Xshell 连接服务器192.168.*.*,账号:test/**** 2.cd ...
- android studio增量更新
一.概述 1.1 概念 增量更新即是通过比较 本机安装版本 和 想要安装版本 间的差异,产生一个差异安装包,不需要从官网下载并安装全量安装包,更不需要将本机已安装的版本下载,而仅仅只是安装此差异安装包 ...
- Kettle中通过触发器方式实现数据 增量更新
在使用Kettle进行数据同步的时候, 共有 1.使用时间戳进行数据增量更新 2.使用数据库日志进行数据增量更新 3.使用触发器+快照表 进行数据增量更新 今天要介绍的是第3中方法. 实验的思路是这样 ...
- odi增量更新策略
增量更新策略:通过一个“update key”比较流数据记录与目标表中的记录比较进行数据整合.具有相同“update key”的记录当相关联列不同时将被更新:在目标表中不存在的记录将被插入.这种方式用 ...
- Android Apk增量更新
前言 有关APK更新的技术比较多,例如:增量更新.插件式开发.热修复.RN.静默安装. 下面简单介绍一下: 什么是增量更新? 增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样. 与 ...
- Elasticsearch系列---增量更新原理及优势
概要 本篇主要介绍增量更新(partial update,也叫局部更新)的核心原理,介绍6.3.1版本的Elasticsearch脚本使用实例和增量更新的优势. 增量更新过程与原理 简单回顾 前文我们 ...
- NDK学习笔记-增量更新
虽然现在有插件化开发和热修复,但为何还需要增量更新?插件化开发和热修复依赖于宿主程序,增量更新适合更新宿主程序. 差分包生成的前提 差分包的生成依赖于BsDiff开源项目,而BsDiff又依赖于Bzi ...
- Android 增量更新完全解析 是增量不是热修复(转)
转自:http://blog.csdn.net/lmj623565791/article/details/52761658 本文在我的微信公众号:鸿洋(hongyangAndroid)首发. 转载请标 ...
- 谈谈混合 App Web 资源的打包与增量更新
综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...
随机推荐
- thinkphp3.2.3 nginx 连接mysql 报错 new PDO 异常
在 php.ini 里重新指定mysql.sock 路径 pdo_mysql.default_socket=/Applications/XAMPP/xamppfiles/var/mysql/mysql ...
- JS 标签页切换
一 <!DOCTYPE html><html><head><meta charset="utf-8"/><title>自 ...
- 动软DbHelperSQL
using System; using System.Collections; using System.Data; using System.Data.SqlClient; using System ...
- 通过真值树解析布尔表达式(eg:A&B|C)
第一步:求出一个表达式的truth tree 1.生成真值表 2.根据真值表生成真值树(合并短路产生相同的两个子树) /**************************************** ...
- Apache添加多端口及实现单ip多端口映射的方法
这篇文章主要介绍了Apache添加多端口及实现单ip多端口映射的方法的相关资料,需要的朋友可以参考下(http://www.0831jl.com) 先给大家说下apache添加多端口的方法,具体步骤如 ...
- form表单简易注册登陆
注册页面: html <form action="updata.php" method="post" id="text_form"&g ...
- System.Web.Mvc.ModelValidationResult.cs
ylbtech-System.Web.Mvc.ModelValidationResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutr ...
- java基础之二维数组不定义列数
有一种特殊的二维数组,它的行数确定,但是每行的列数不确定.这样的的数组实现方法:先创建制定行数,列数缺省的二维数组,然后对数组的每一行重新初始化.举例如下: package day5; //第二种定义 ...
- GitHub:如何构建一个股票市场知识图谱?(附代码&链接)
来源:专知 本文约 600007 董事⻓/董事 高燕 女 60 600007 执⾏董事 刘永政 男 50 600008 董事⻓/董事 ··· ··· ··· ··· ··· 注:建议表头最好用相应的英 ...
- vue @scroll
参考: https://blog.csdn.net/qq449736038/article/details/80769507