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 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...
随机推荐
- UMP系统功能 分库分表
- 笔记:使用Python解析JSON
使用Python解析JSON json是一种轻量级的数据交换格式,易于阅读和编写. json函数具体作用描述 函数 具体描述作用 json.dumps 将python对象编码为JSON字符串 json ...
- 2 _ 基本框架 _ 检测VMX环境
VT 是先开为大,谁先开谁上层,谁上层 谁权限大. 1 判断是否支持 VMX intel 白皮书 第3卷 传入 参数eax =1, 返回值 ecx 的第5位 = 1 则 surpported VMX. ...
- Qt分割线
方法:使用QFrame QFrame * line = new QFrame(); line->setFrameShape(QFrame::HLine); line->setFrameSh ...
- UVALive-3722 留个坑,为什么费马小定理求逆元不对??
#include <iostream> #include <cstdlib> #include <queue> #include <algorithm> ...
- 【JZOJ3379】查询
description 对于一个整数序列,查询区间第k大数可以在O(logN)的时间内轻松完成.现在我们对这个问题进行推广. 考虑带重复数的集合(multiset).定义在该类集合上的并操作" ...
- C++萃取技术的一个简单初探
首先本文并不是讲解C++萃取技术,关于C++的萃取技术网上有很多文章,推荐http://www.cppblog.com/woaidongmao/archive/2008/11/09/66387.htm ...
- 2-sat——输出方案poj3683
一篇讲的详细的博客 https://blog.csdn.net/Hawo11/article/details/74908233 缩点后为什么要建立反图? 如果是按原图处理,选择一个点之后要把所有其后续 ...
- Docker系列(十一):Kubernetes集群集群部署实践
Kubernetes分布式集群架构 服务注册和服务发现问题怎么解决的? 分布式通讯的核心就是ip加端口 每个服务分配一个不变的虚拟IP+端口 系统env环境变量里有每个服务的服务名称到IP的映射 如下 ...
- Python学习day04 - Python基础(2)数据类型基础
<!doctype html>day04 - 博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { ...