Android热修复
来源:互联网 发布:app开发用什么软件 编辑:程序博客网 时间:2024/04/30 11:51
AndFix
Github:https://github.com/alibaba/AndFix
Android上集成:
1.AndroidManifest中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
2.把Java层的代码引入到你的工程,配置Ndk开发环境并把jni Native代码添加进来(见附件或gitHub自行下载)。
eclipse:
将lib包(AndFix-master)添加到自己的工程
android studio:
<groupId>com.alipay.euler</groupId>
<artifactId>andfix</artifactId>
<version>0.3.1</version>
<type>aar</type>
</dependency>
dependencies {
compile 'com.alipay,euler:andfix:0.3.1@aar'
}
3.建议在自定义Application中初始化,为了更早的修复应用中的bug。
super.onCreate();
// 初始化patch管理类
mPatchManager = new PatchManager(this);
// 初始化patch版本
try {
//注意每次appversion变更都会导致data/packagename/files/apatch_opt目录下所有补丁被删除(注1)
//如果appversion没有改变,则会加载data/packagename/files/apatch_opt目录下已有的所有补丁。
mPatchManager.init(getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
// 加载已经添加到PatchManager中的patch
mPatchManager.loadPatch();
}
4.如果有新的补丁需要修复,下载完成后,进行以下操作
try {
//指定补丁路径,补丁会立即生效
mPatchManager.addPatch(patchFileString);
} catch (IOException e) {
e.printStackTrace();
}
注1:这个patchFileString路径表示的.aptch文件在被加载过一次后会被AndFix框架复制到data/packagename/files/apatch_opt目录下,所以sdcard中的补丁用过一次就可删除(也可不删,无影响,框架已做判断,同一个补丁只复制一次)。
注2:如果本地保存了多个补丁,那么AndFix会按照补丁生成的时间顺序加载补丁,具体是根据.apatch文件中的PATCH.MF的字段Created-Time,并且每个补丁的名字不可相同,因为补丁文件在文件名字相同的情况下,框架会直接去加载data/packagename/files/apatch_opt这个目录下的文件,所以不同的补丁一定要使用不同的名字。
5.当你的apk需要做一个版本升级时,需要把之前patch文件的删除,需要进行以下操作
6.代码混淆
-keep class * extends java.lang.annotation.Annotation-keepclasseswithmembernames class * {
native <methods>;
}
-keep class com.alipay.euler.andfix.** { *; }
patch文件的生成
使用工具:apkpatch-1.0.3 (附件解压后的tools目录中)
原理:根据两个apk包,生成一个差异文件,就是所谓的补丁文件即.apatch文件(由移动开发人员生成提供给后端用以下载)。
-f <new.apk> :新版本
-t <old.apk> : 旧版本
-o <output> : 输出目录
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密码
-a <alias>: keystore 用户别名
-e <alias password>: keystore 用户别名密码
客户端请求服务器接口(api),服务器根据用户传递的数据分析是否有需要修复的bug。
如果有bug需要修复,就下载服务器指定的.apatch文件的链接,下载完后及时加载并修复,使用addpatch(path)方法,补丁会立即生效。
注意:AndFix是无法添加类和字段的,其中部分手机(部分小米,华为)不能实现热更新;
参考:http://blog.csdn.net/qxs965266509/article/details/49802429
我的demo中补丁不能立即生效,必须要app重启才可以生效,不知道为什么,本人比较懒,没有着手解决这个问题,有知道的朋友说一身哈!
- Android 热修复/热更新
- android热修复--手写热修复
- Android热修复
- Android 热修复总结
- Android 热修复原理
- Android 热修复
- Android热修复分析
- Android 热修复-AndFix
- Android热修复实现
- Android 热修复总结
- Android热修复---AndFix
- Android的热修复
- Android热修复
- 浅谈Android热修复
- Android的热修复
- Android 热修复总结
- android 热修复
- Android 热修复
- 深入浅出JMS(二)--ActiveMQ简单介绍以及安装
- wampserver搭建图标一直是红色或者橙色怎么解决?
- 随笔
- 六款值得推荐的android(安卓)开源框架简介
- 【Java基础】采用Filter实现AOP完成统一登录验证
- Android热修复
- JS与OC的交互
- centos7开机没有进入桌面gnome,kde
- 一篇搞定RSA加密与SHA签名|与Java完全同步
- 5.php观察者模式
- Mac 可设置环境变量的位置、查看和添加PATH环境变量
- window.showModalDialog 关闭当前页面刷新父页面
- 华为机试——字符串中出现相同最长字符串
- 【mongoDB】mongoDB学习日记