Android在线热修复基本流程

在线热修复基本流程

每个APP都会集成一个用于捕获并统计线上Crash的SDK,通过这个SDK,我们可以知道APP的健康状况,这是在线修复的基础。从线上Crash的统计中可以得知APP是否存在需要在线热修复的严重性Crash。如果存在,那么接着根据Crash日志定位分析出哪里的代码出的问题,这是需要基于这个发布的版本号对应的代码标签拉出一个bugfix分支,并在这个分支上修复问题。问题修复后,首先是开发人员自测,再提交体侧申请,测试回归并确认问题已经解决后,开发就可以在自动化构建平台出发bugfix分支的构建,这个构建会同时执行前后两个版本APK的对比,生成补丁文件。补丁文件生成后,就需要想办法下发给出问题 的APP。这里可以有两种方法,一,APP实现了自己的推送功能,也就是和服务器保持稳定的长连接,可以通过这个通道直接把补丁问价推送给用户手机上的APP。另外一种是手机并没有长连接,那么只能在某个时机让APP主动向服务器请求是否需要打补丁,如果需要就下载补丁文件,这个一般都是放在APP启动时去判断。当补丁文件生成后,就可以开始将bugfix分支修复的代码同步合并带主干分支,以确保后续不会出现相同的问题。

Dexposed

Dexposed 是阿里巴巴无线事业部开源的Android平台下的无侵入运行时AOP框架,该框架基于AOP思想,支持经典的AOP使用场景,可应用于日志记录、性能统计、安全控制、事务处理、异常处理等方面。
Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器、编织器或者字节码重写器。集成Dexposed,只需要在应用初始化阶段加载一个很小的JNI库。
Dexposed实现的hooking,不仅科技hook应用中的自定义函数,也可以hook应用中调用的Android框架的函数。基于动态类加载技术,运行中的APP可以加载一小段经过编译的Java AOP代码,在不需要重启APP的前提下实现修改目标的APP的行为。

集成Dexposed

依赖一个aar包,其中包含一个名为dexposedbridge.jar的Jar包,以及两个.so文件:libdexposed.so和libdexposed_l.so。在自定义Application中初始化:

private boolean mIsSupported = false;//设备是否支持dexposed
private boolean mIsLDevice = false;//设备Android系统是否是Android 5.0及以上
@Override
public void onCreate(){
	super.onCreate();

	//check device if support and auto load libs
	mIsSupported = DexposedBridge.canDexposed(this);
	mIsLDevice = Build.VERSION.SDK_INT >= 21;
}
Dexposed基本用法

在Dexposed中,对于某个函数而言,有三个注入点可供选择:

  • 函数执行前注入–before
  • 函数执行后注入–after
  • 替换函数执行中的代码段–replace
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值