Android 增量更新指南
来源:互联网 发布:ios kvo监听数组变化 编辑:程序博客网 时间:2024/05/29 18:34
导论:
网络的资料太散乱,看的我都糊涂,这次我自己参考了各位大神的文章,在这里总结了一下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-bundlesdk.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-win32bsdiff old.apk new.apk PATCH.patch
—通过bspatch 合成新的apk
cd C:\Users\Aile\Desktop\bsdiff4.3-win32bspatch old.apk new2.apk PATCH.patch
—通过certutil -hashfile可以查看MD5值,不出差错,是一样的
certutil -hashfile new.apk MD5certutil -hashfile new2.apk MD5
9:最后一步就是验证,我们把old.apk和增量文件放入指定路径下,比如/storage/emulated/0/aile,先安装old.apk,也就是模拟用户已经安装的应用,PATCH.patch文件模拟从服务器端下载到本地的文件,我们单击安装好的apk的update按钮,就会自动调用PATCH.patch,弹出如图所示安装提示就说明成功了.
- Android 增量更新指南
- android 增量更新应用
- Android 增量更新实例
- android 增量更新
- android增量更新demo
- android实现增量更新
- android 增量更新
- Android 增量更新实例
- Android增量更新
- Android 增量更新APK
- Android APP增量更新
- Android之增量更新
- android增量更新
- Android增量更新
- android增量更新
- Android增量更新
- Android 增量更新
- Android UpdateApk 增量更新
- java虚拟机学习笔记一
- 小偷咋这么快破解了银行卡密码
- cxf框架整合ssm框架案例
- equals与==的区别
- POJ 2217 Secretary (后缀数组)
- Android 增量更新指南
- Coursera Ng机器学习编程作业1:Linear Regression
- struts2拦截非法字符+防止反复提交
- java 异常处理的一个小错误
- ASP.NET MVC Razor语法
- Java集合之LinkedHashSet
- Python进阶(四十六)-Python3实现SMTP发送邮件详细教程
- 乔布斯:遗失的访谈(1995)有感
- JAVA String 如何去掉指定字符