【第二节】android增量升级之使用so文件进行增量升级
2016-01-05 15:50
513 查看
该篇文章从eoeAndroid搬迁过来的,原文地址:【第二节】android增量升级之使用so文件进行增量升级
新增Utils类添加相应的一些方法。
新增UpdateApkTask类进行旧apk和差异包合成操作。(备注:该差异包需要手动拷贝到手机指定路径下)
不要忘记添加权限
先获取两个不同的apk,如该项目中先在oncreate方法中注释掉afterUpdate()方法,生成一个apk,然后再注释掉beforeUpdate()方法,生成另一个apk,将两个apk拷贝到电脑指定路径下。
然后打开cmd,进入到bsdiff4.3-win32工具所在位置
拆分差异包命令如下:
我们就能看见在指定位置下生成了差异包SmartAppUpdate.patch
合成新APK命令如下:
我们就能看见在指定位置下生成了新apk SmartAppUpdate_new_patch.apk
比较SmartAppUpdate_new.apk和SmartAppUpdate_new_patch.apk,就会发现,这两个apk是一模一样的。
下一节内容:【第三节】android增量升级之提供服务端代码,整理项目
下载地址:项目文件及工具(bsdiff-4.3-win32,apk,SmartAppUpdate)
前言
在第一节中,我讲了如何生成增量升级的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)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories