Android 增量更新指南
2017-04-26 22:12
197 查看
导论:
网络的资料太散乱,看的我都糊涂,这次我自己参考了各位大神的文章,在这里总结了一下android studio工具,基于windows平台下的Android增量更新开发,并附有详细的操作步骤,若有错误还请批评指正,对于大神们的文章我就不在这一一列举了,若有疑问,还请海涵
概念:
android开发中,软件需要不断的开发和升级新功能,但是该应用不是几兆的大小,现在网速够用但是流量还很贵,因此为了客户能享受最新的版本,那我们就可以通过增量更新来帮助他们升级并有更好的体验
原理:
1:在用户手机上提取当前应用安装信息,即old.apk信息(发生在android手机端),
2:通过bsdiff工具让old.apk和new.apk生成增量文件,比如名称叫PATCH.patch(这是远程服务器做的事情)
3:Android手机端从服务器下载增量文件PATCH.patch到本地并自动与old.apk合并后完成安装(发生在android手机端)
步骤:
1:配置NDK:
A: Android studio支持NDK builder和CMake,其中CMake是推荐的方法,现在我们开始搭建三个依赖,点击Tools-android-SDK Manager-Appearance & Behavior-system setting-android SDK–SDK Tools-选中CMake,LLDB,NDK之后单击OK,剩下的Gradle会帮助我们编译好
B:设置NDK环境变量:
在我的电脑-属性-高级系统设置-高级-环境变量-系统变量path后面接着添加NDK安装路径(;C:\Android\sdk\ndk-bundle)
2:新建Project(IncreaUpdate),过程中需要勾选(Include C++ Support),定义包名com.aile.activity,新建MainActivity,代码如下:
3:修改app/module的build.gradle和local.properties
4:在app/src/main新建jni文件夹,下载bsdiff-bsdiff-4.3和bzip2-1.0.6.tar,分别将bspatch.c和bzip除了.h和.c结尾的文件之外都删除连着文件夹同级别放入jni目录,如图:
http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz
http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
5:打开bspatch.c文件,开始修改代码,并且将一处main改为patchMethod即可,其他开头如下:
6:这个时候我们就可以验证增量更新了,首先build-generate sign apk填写信息后生成APK,取名old.apk,然后我们为了区别old.apk,我们可以修改下代码,比如在布局文件activity_main再添加一个button,然后再build-generate sign apk生成另外一个新的APK,取名new.apk,因为没有服务器和我的手机又没有SDcard,所以只能放在本地内部存储卡上,也就是目录(/storage/emulated/0/aile)里
7:下载bsdiff4.3-win32工具,用来生成增量文件和合成新的apk,下载完解压后,可以看到有两个可执行文件bsdiff.exe和bspatch.exe
http://download.csdn.net/download/qwd108114/9704758
8:将old.apk和new.apk放入bsdiff4.3-win32中,打开window 终端
—通过bsdiff 生成PATCH.patch增量文件
—通过bspatch 合成新的apk
—通过certutil -hashfile可以查看MD5值,不出差错,是一样的
9:最后一步就是验证,我们把old.apk和增量文件放入指定路径下,比如/storage/emulated/0/aile,先安装old.apk,也就是模拟用户已经安装的应用,PATCH.patch文件模拟从服务器端下载到本地的文件,我们单击安装好的apk的update按钮,就会自动调用PATCH.patch,弹出如图所示安装提示就说明成功了.
网络的资料太散乱,看的我都糊涂,这次我自己参考了各位大神的文章,在这里总结了一下android studio工具,基于windows平台下的Android增量更新开发,并附有详细的操作步骤,若有错误还请批评指正,对于大神们的文章我就不在这一一列举了,若有疑问,还请海涵
概念:
android开发中,软件需要不断的开发和升级新功能,但是该应用不是几兆的大小,现在网速够用但是流量还很贵,因此为了客户能享受最新的版本,那我们就可以通过增量更新来帮助他们升级并有更好的体验
原理:
1:在用户手机上提取当前应用安装信息,即old.apk信息(发生在android手机端),
2:通过bsdiff工具让old.apk和new.apk生成增量文件,比如名称叫PATCH.patch(这是远程服务器做的事情)
3:Android手机端从服务器下载增量文件PATCH.patch到本地并自动与old.apk合并后完成安装(发生在android手机端)
步骤:
1:配置NDK:
A: Android studio支持NDK builder和CMake,其中CMake是推荐的方法,现在我们开始搭建三个依赖,点击Tools-android-SDK Manager-Appearance & Behavior-system setting-android SDK–SDK Tools-选中CMake,LLDB,NDK之后单击OK,剩下的Gradle会帮助我们编译好
B:设置NDK环境变量:
在我的电脑-属性-高级系统设置-高级-环境变量-系统变量path后面接着添加NDK安装路径(;C:\Android\sdk\ndk-bundle)
2:新建Project(IncreaUpdate),过程中需要勾选(Include C++ Support),定义包名com.aile.activity,新建MainActivity,代码如下:
public class MainActivity extends AppCompatActivity { private Button mBtnPatch; //PATCH.patch和Newer.apk存放路径 final File newApk = new File(new File("/storage/emulated/0/aile"), "Newer.apk"); final File patch = new File(new File("/storage/emulated/0/aile"), "PATCH.patch"); //native方法 public static native int bspatch(String oldApk, String newApk, String patch); //静态加载库 static { System.loadLibrary("bsdiff"); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnPatch = (Button) findViewById(R.id.id_btn_patch); mBtnPatch.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { patch(); } }); } //合并成功后并开始安装apk private void patch() { bspatch(extract(this), newApk.getAbsolutePath(), patch.getAbsolutePath()); if (newApk.exists()) install(this, newApk.getAbsolutePath()); } //获取当前用户apk安装信息 public static String extract(Context context) { context = context.getApplicationContext(); ApplicationInfo applicationInfo = context.getApplicationInfo(); String apkPath = applicationInfo.sourceDir; return apkPath; } //安装指定apk public static void install(Context context, String apkPath) { Intent i = new Intent(Intent.ACTION_VIEW); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); context.startActivity(i); android.os.Process.killProcess(android.os.Process.myPid()); } public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 2) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { patch(); } } } }
3:修改app/module的build.gradle和local.properties
ndk { moduleName = 'bsdiff' }
ndk.dir=C\:\\Android\\sdk\\ndk-bundle sdk.dir=C\:\\Android\\sdk
4:在app/src/main新建jni文件夹,下载bsdiff-bsdiff-4.3和bzip2-1.0.6.tar,分别将bspatch.c和bzip除了.h和.c结尾的文件之外都删除连着文件夹同级别放入jni目录,如图:
http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz
http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
5:打开bspatch.c文件,开始修改代码,并且将一处main改为patchMethod即可,其他开头如下:
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <err.h> #include <unistd.h> #include <fcntl.h> #include <jni.h> #include <err.h> #include "bzip2/bzlib.h" JNIEXPORT jint JNICALL Java_com_aile_activity_MainActivity_bspatch (JNIEnv *env, jclass cls, jstring old, jstring new, jstring patch){ int argc = 4; char * argv[argc]; argv[0] = "bspatch"; argv[1] = (char*) ((*env)->GetStringUTFChars(env, old, 0)); argv[2] = (char*) ((*env)->GetStringUTFChars(env, new, 0)); argv[3] = (char*) ((*env)->GetStringUTFChars(env, patch, 0)); int ret = patchMethod(argc, argv); (*env)->ReleaseStringUTFChars(env, old, argv[1]); (*env)->ReleaseStringUTFChars(env, new, argv[2]); (*env)->ReleaseStringUTFChars(env, patch, argv[3]); return ret; }
6:这个时候我们就可以验证增量更新了,首先build-generate sign apk填写信息后生成APK,取名old.apk,然后我们为了区别old.apk,我们可以修改下代码,比如在布局文件activity_main再添加一个button,然后再build-generate sign apk生成另外一个新的APK,取名new.apk,因为没有服务器和我的手机又没有SDcard,所以只能放在本地内部存储卡上,也就是目录(/storage/emulated/0/aile)里
7:下载bsdiff4.3-win32工具,用来生成增量文件和合成新的apk,下载完解压后,可以看到有两个可执行文件bsdiff.exe和bspatch.exe
http://download.csdn.net/download/qwd108114/9704758
8:将old.apk和new.apk放入bsdiff4.3-win32中,打开window 终端
—通过bsdiff 生成PATCH.patch增量文件
cd C:\Users\Aile\Desktop\bsdiff4.3-win32 bsdiff old.apk new.apk PATCH.patch
—通过bspatch 合成新的apk
cd C:\Users\Aile\Desktop\bsdiff4.3-win32 bspatch old.apk new2.apk PATCH.patch
—通过certutil -hashfile可以查看MD5值,不出差错,是一样的
certutil -hashfile new.apk MD5 certutil -hashfile new2.apk MD5
9:最后一步就是验证,我们把old.apk和增量文件放入指定路径下,比如/storage/emulated/0/aile,先安装old.apk,也就是模拟用户已经安装的应用,PATCH.patch文件模拟从服务器端下载到本地的文件,我们单击安装好的apk的update按钮,就会自动调用PATCH.patch,弹出如图所示安装提示就说明成功了.
相关文章推荐
- android 增量更新应用
- 增量升级(省流量更新)的Android客户端实现
- Android 增量更新实例(Smart App Updates)
- 浅谈Android增量更新客户端的实现方法
- Android--增量升级--增量更新客户端的实现方法
- Nexus One:升级更新到Android 2.2.1 冻酸奶 -下载指南
- android 增量更新原理
- android 增量更新之客户端
- android 增量更新
- Android 增量更新实例(Smart App Updates)
- android 增量更新 bsdiff\bspatch库编译
- Android增量更新
- Android 增量更新实例
- android 增量更新之 服务端 附带java 调用示例
- 【Android增量升级系列_03】 增量更新项目中遇到的一些异常
- android 增量更新原理及实现
- Android 增量更新实例(Smart App Updates)
- 【Android增量升级系列_01】 浅谈Android增量更新客户端的实现方法
- 增量升级(省流量更新)的Android客户端实现
- Android 增量更新实例(Smart App Updates)