Android 的增量升级原理就是做 apk 版本之间的差分数据包,得到这个补丁包以后,在客户端合并旧的 apk 和补丁包,得到一个新的 apk ,最终通过新的 apk 实现升级。

Android的增量升级是通过jni现成的c语言bsdiff拆包和bspatch合并包。可以下载bsdiff的源码,其中bsdiff.c主要是通过一个oldApk和一个newApk,然后生成一个patch包,生成的patch包中包含标识信息,newApk的大小,差分的二进制流等信息。bspatch.c接收一个oldApkpatch,首先读取标识信息,newApk大小,生成新的newApk文件,并写入文件。写文件和读文件是调用开源库bzip2

增量升级中动态库的生成需安装android ndkndk通过Android.mk文件,编译c/c++打包成so库,自动的将sojava应用打包成apk文件。

开发流程:

1新建类PatchUpdate.java

在类中编写native方法,并在类初始化时引入与c/c++共享库。

package com.diffpatch;public class PatchUpdate {static {System.loadLibrary("update");}        public native int patch(String oldApkPath, String newApkPath, String patchPath);}

其中“update”就是在android.mk中定义的共享库名。

2、利用Javah生成JNI头文件,编写Android.mk

编译该项目,命令行模式,进入项目目录下的bin目录然后输入

javah -jni com.diffpatch.PatchUpdate会自动的生成

com_diffpatch_PatchUpdate.h头文件

新建jni目录,将该头文件拷贝到jni目录里,其中LOCAL_SRC_FILES要引用并实现这个头文件。将bzip2源码、bsdiffbspatch拷贝到jni目录中,编写Android.mk,如下所示:

Android.mk文件:

#引入当前目录LOCAL_PATH := $(call my-dir)#调用CLEAR_VARS脚本清空变量include $(CLEAR_VARS)#共享库名,在java文件中引用LOCAL_MODULE    := updateLOCAL_CXXFLAGS :=LOCAL_C_INCLUDES := $(LOCAL_PATH)#需动态编译的c源文件LOCAL_SRC_FILES := com_diffpatch_PatchUpdate.cLOCAL_LDLIBS := -lz -lloginclude $(BUILD_SHARED_LIBRARY)

3、做完这一步以后,使用NDK生成动态库so。命令行到工程目录,在该目录下使输入NDK_HOME\ ndk-build就会自动的在lib下生成so文件,如下图所示:



4、至此,我们可以在java程序中类PatchUpdatepatch方法做apk与补丁的合并。

备注:Demo中定义的MainActivity中使用。Demo中已经生成了so文件,不用安装NDK即可安装Demoapk。程序中需要用的old.apk,app.patch需放在sdcard/2目录下

现有的更新方式是下载一个最新的apk包,使用现有的方法只需要下载一个最新apk与当前apk的一个差分包,然后再本地进行合并生成最新的apk包即可。

升级之前,先对本地的apkMD5或者SHA散列,得到散列值,然后与服务器中的相应版本的apk做散列值对比,若一样,则下载patch包,否则可能是本地apk文件出问题了,需要下载完全的最新apk

更多相关文章

  1. Unexpected namespace prefix "xmlns" found for tag LinearLayo
  2. Android创建文件夹
  3. android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLIT
  4. Android studio 使用心得(六)---android studio 如何加载.so文件
  5. 编写Android中直接可运行的二进制文件
  6. # Android文件存储和数据库基本知识
  7. android 在布局文件中报错:This text field does not specify an

随机推荐

  1. Android中Drawable Resource学习
  2. Android应用开发揭秘 第一章
  3. AIDL (Android(安卓)Interface Definitio
  4. Android灭亡论之Firefox OS操作系统出现
  5. 系出名门Android(3) - 对话框(Dialog)和
  6. Android(安卓)解决tools:replace=android
  7. 华章IT图书书讯(2011年第6期)
  8. Android异步处理系列文章索引
  9. 代码虚拟的[小代码]在Android和PHP之间的
  10. 【Android】Android消息处理机制