Alibaba-Dexposed框架在线热补丁修复的使用
来源:互联网 发布:php在线运行测试 编辑:程序博客网 时间:2024/04/30 14:36
转:http://blog.csdn.net/qxs965266509/article/details/49821413
版权声明:本文为博主原创文章,未经博主允许不得转载。来自:http://blog.csdn.net/qxs965266509
目录(?)[-]
- DexPosed
- 介绍
- 应用场景
- 在Android上的使用
- 在自定义Application初始化
- patch文件的生成
- 支持的系统
前两篇已经介绍了alibaba的AndFix热修复:
Alibaba-AndFix Bug热修复框架的使用
Alibaba-AndFix Bug热修复框架原理及源码解析
DexPosed是Alibaba的另一个框架,都可以在线热修复bug,只不过DexPosed也可以实现其他的功能。
- DexPosed
- 介绍
- 应用场景
- 在Android上的使用
- 在自定义Application初始化
- patch文件的生成
- 支持的系统
DexPosed
介绍
DexPosed是强大而无侵入的AOP(面向切面编程)运行Android应用程序开发框架,基于开源的Xposed框架项目的工作(Xposed是修改系统框架服务的框架)。
Github : https://github.com/alibaba/dexposed
应用场景
AOP编程
仪表(用于测试,性能监测等)
在线热补丁修复
SDK hooking(钩)以提供更好的开发体验
在Android上的使用
Android Studio中使用:
在Gradle中添加:
- 1
- 2
- 3
- 1
- 2
- 3
在libs中加入:dexposedbridge.jar、patchloader.jar包。
需要添加的so文件有:libdexposed.so、libdexposed_1.so。
在自定义Application初始化
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
当收到服务器推送消息,需要下载patch文件,下载完成后即时加载来修复bug。
PatchResult result = PatchMain.load(this, “patch apk文件的路径”, null);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
//注:patch apk 文件不能放在共享目录中,建议放在cache文件中。
在应用升级之前需每次load加载patch apk,当应用升级后把patch apk进行清空。
PatchMain.load加载patch apk,会遍历apk中实现IPatch接口的所有,并hook对应的方法对象。
patch文件的生成
新创建一个项目MyPatch,并在libs中加入dexposedbridge.jar、patchloader.jar包。
在build.gradle设置jar为provided,如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
如果想修复一个bug,需在MyPatch中创建一个类,并实现IPatch接口,实现handlePatch方法。
接下的Demo是想在bug方法的前后做一些处理,也可以终止bug方法的调用及修改bug方法的参数:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
下面的Demo是直接替换掉bug方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
上面2个Demo两者的区别是:回调接口的类不同(XC_MethodHook和XC_MethodReplacement);
//XC_MethodHook是XC_MethodReplacement的基类。
把MyPatch项目打包生成补丁apk文件,服务器通知客户端下载补丁文件apk,并使用
- 1
- 1
加载补丁apk,即时修复bug方法。
如果项目有代码混淆:
需注意的部分
- 1
- 2
- 1
- 2
packageName+className必须是混淆后的类名和方法名称。
在打release包时,在build/outputs/mapping/release/下面有mapping.txt,这个里面记录了混淆以前的类和混淆以后的类的一一对应关系(所以叫mapping.txt),所以每次发版以后要保留好mapping.txt文件,以便以后编写Patch。
支持的系统
注意:android4.4之后的版本都用Art取代了Dalvik,所以要hook Android4.4以后的版本就必须去适配Art虚拟机的机制。目前官方表示,为了适配Art的dexposed_l只是beta版,所以最好不要在正式的线上产品中使用它。
- Alibaba-Dexposed框架在线热补丁修复的使用
- Alibaba-Dexposed框架在线热补丁修复的使用
- Alibaba-Dexposed框架在线热补丁修复的使用
- dexposed框架Android在线热修复
- android Alibaba热补丁修复使用
- Alibaba-AndFix Bug热修复框架的使用
- Alibaba-AndFix Bug热修复框架的使用
- Alibaba-AndFix Bug热修复框架的使用
- Alibaba-AndFix Bug热修复框架的使用
- 使用Alibaba-AndFix Bug热修复框架
- alibaba dexposed使用须知
- Android最详细的Alibaba-AndFix 热修复框架的使用
- Android AndFix热补丁动态修复框架使用教程
- Android AndFix热补丁动态修复框架使用教程
- Android热补丁修复框架DroidFix使用笔记
- 使用Dexposed为你的安卓应用加上在线修复的能力。
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Java sdut acm 2271 Eddy的难题
- 转载:MySQL事务隔离级别详解
- MySql多端口一台主机多个实例
- JavaCC 研究与应用
- TCP差错控制
- Alibaba-Dexposed框架在线热补丁修复的使用
- oracle之 表连接
- BZOJ 2115: [Wc2011] Xor
- 魅族 Notification 遇到的奇葩问题
- HDU4027
- 平面拟合
- Scrollview 嵌套 RecyclerView 出现的问题,例如recycleview不显示,或者卡动。
- Android之Activity生命周期及启动模式
- 2017年会是Serverless爆发之年吗?