【第二节】android增量升级之使用so文件进行增量升级
来源:互联网 发布:淘宝震动棒买家秀图片 编辑:程序博客网 时间:2024/05/16 07:23
该篇文章从eoeAndroid搬迁过来的,原文地址:【第二节】android增量升级之使用so文件进行增量升级
前言
在第一节中,我讲了如何生成增量升级的so文件,没看的童鞋点【第一节】android增量升级之生成so文件 ,在这一节中,我讲一下如何去使用so文件进行增量升级。
第一步
建立一个新项目,如SmartAppUpdate,包名命名为com.smartapp.update,为什么要这么命名包名,是因为在第一节中,我们的BatchUtils文件是建立在com.smartapp.update包下的,而里面native方法生成的com_smartapp_update_BatchUtils.h文件也是以此包名命名的,所以为了调用so文件中的该native方法,所以我们需要在新项目中增加com.smartapp.update包,并将第一个项目中的BatchUtils.java文件拷贝到该包下
第二步
因为BatchUtils.java中的native方法是私有方法,所以我们需要在该类中增加下面的方法去调用该方法
public static int applyPatchToOwn(Context context, String newApkPath, String patchPath) throws IOException { String old = context.getApplicationInfo().sourceDir; return patchApk(old, newApkPath, patchPath); }
第三步
在新项目中的libs文件夹下新建文件夹armeabi,并将libSmartAppUpdate.so文件拷贝到该文件夹下,并在MainActivity.java类中增加以下代码,去加载该so文件
static { System.loadLibrary("SmartAppUpdate"); }
第四步
添加逻辑代码,在项目中,我做了两个布局,分别是升级前的和升级后的展示界面,升级前的界面为activity_main.xml,升级后的界面为activity_main_new.xml,在onCreate方法中注释不同的代码实现不同的界面效果。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); beforeUpdate();afterUpdate(); }
新增Utils类添加相应的一些方法。
新增UpdateApkTask类进行旧apk和差异包合成操作。(备注:该差异包需要手动拷贝到手机指定路径下)
不要忘记添加权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
第五步
用工具去生成差异包,并拷贝到手机指定路径下,在此提供一个window电脑使用的差分差异包工具bsdiff4.3-win32,请在附件中下载。该工具何以进行差分差异包,也可以进行合并就apk和差异包生成新apk。具体使用方法如下:
先获取两个不同的apk,如该项目中先在oncreate方法中注释掉afterUpdate()方法,生成一个apk,然后再注释掉beforeUpdate()方法,生成另一个apk,将两个apk拷贝到电脑指定路径下。
然后打开cmd,进入到bsdiff4.3-win32工具所在位置
拆分差异包命令如下:
bsdiff 旧apk地址 新apk地址 生成差异包地址如:bsdiff C:\Users\krubo\Desktop\aaa\SmartAppUpdate.apk C:\Users\krubo\Desktop\aaa\SmartAppUpdate_new.apk C:\Users\krubo\Desktop\aaa\SmartAppUpdate.patch
我们就能看见在指定位置下生成了差异包SmartAppUpdate.patch
合成新APK命令如下:
bspatch 旧apk地址 新apk地址 差异包地址如:bspatch C:\Users\krubo\Desktop\aaa\SmartAppUpdate.apk C:\Users\krubo\Desktop\aaa\SmartAppUpdate_new_patch.apk C:\Users\krubo\Desktop\aaa\SmartAppUpdate.patch
我们就能看见在指定位置下生成了新apk SmartAppUpdate_new_patch.apk
比较SmartAppUpdate_new.apk和SmartAppUpdate_new_patch.apk,就会发现,这两个apk是一模一样的。
第六步
将第五步中生成的差异包SmartAppUpdate.patch拷贝到手机的指定路径下,然后安装旧的apk,也就是注释掉afterUpdate()方法生成的apk,然后点击升级按钮,等待片刻,我们就能看见新apk安装界面,安装完成后,点击进入,发现里面的界面已改变,至此,使用so文件进行增量升级教程已结束。
下一节内容:【第三节】android增量升级之提供服务端代码,整理项目
下载地址:项目文件及工具(bsdiff-4.3-win32,apk,SmartAppUpdate)
- 【第二节】android增量升级之使用so文件进行增量升级
- [Android实例] 【第一节】android增量升级之生成so文件
- 【第一节】android增量升级之生成so文件
- Android Studio 更新升级之增量升级
- Android增量升级功能
- Android应用增量升级
- android 增量升级
- Android增量升级
- android 增量升级
- Android应用增量升级
- Android应用增量升级
- Android应用增量升级
- android应用增量升级
- Android-增量升级
- android 增量升级
- android应用增量升级
- Android应用增量升级
- Android增量升级
- 【第三章】 DI 之 3.4 Bean的作用域 ——跟我学spring3
- MFC中动态添加菜单项和响应菜单事件
- BING和EdgeBoxes移植到TK1(未完)
- cxf+spring发布webservice和调用
- memset清空一个结构类型的变量或数组
- 【第二节】android增量升级之使用so文件进行增量升级
- java list<integer>一组不连续的数字进行每10个一组分组,要求各组元素之和差值最小。list%10>=5的单独算一组,否则归并到任意一组。
- C++中静态成员函数和非静态成员函数的区别
- Ⅰ.18.1 如何存储和定位共享脚本和共享数据
- myeclipse开启后卡死、building workspace缓慢 问题解决
- tomcat使用APR后性能竟然毫无提升
- 关于setBackgroundResource 中偶尔会出现padding失效问题
- android moveTaskToback的作用 退出后台
- 顺序表的基本操作