标签:加载 out java turn obj 说明 stat ati 编译
QuickPatch项目地址:https://gitee.com/egg90/QuickPatch 和 https://github.com/eggfly/QuickPatch 同步更新
类似于美团的Robust插桩热修复,但是代码可读性比较强,还在继续完善,todo list在项目README里
特性:基于函数插桩,兼容性好(Android版本升级不需要做修改),支持热更新无需重启app,参考了美团的Robust插桩热修复框架,精简了很多实现细节,代码可读性高
一句话原理
简单地讲,就是通过编译时在每个函数的头部插入一个if判断和一个proxy代理,就可以在运行时动态替换实现,无需重启。代码如下:
protected void onCreate(Bundle savedInstanceState) { if (_QPatchStub != null) { // _QPatchStub.proxy() will check method existance and call it MethodProxyResult proxyResult = _QPatchStub.proxy(this, "onCreate", "(Landroid/os/Bundle;)V", new Object[]{savedInstanceState}); if (proxyResult.isPatched) { return; } } // origin implementation below super.onCreate(savedInstanceState); // ... }
设计思路
DEMO
使用说明
./gradlew gradleplugin:uploadArchives # 编译插桩插件
./gradlew app:installDebug # 使用插件编译app代码并插桩
性能优化思路
介绍自己的一个Android插桩热修复框架项目QuickPatch
标签:加载 out java turn obj 说明 stat ati 编译
原文地址:https://www.cnblogs.com/eggfly/p/9540777.html