介绍自己的一个Android插桩热修复框架项目QuickPatch

发布时间:2020-06-26 10:12:01 作者:eggfly
来源:网络 阅读:4135

QuickPatch项目地址:

https://gitee.com/egg90/QuickPatch 和 https://github.com/eggfly/QuickPatch 同步更新

类似于美团的Robust插桩热修复,但是代码可读性比较强,还在继续完善,todo list在项目README里

QuickPatch项目介绍

年轻人的第一个Android插桩热修复框架

基于函数插桩,兼容性好(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

介绍自己的一个Android插桩热修复框架项目QuickPatch

使用说明
./gradlew gradleplugin:uploadArchives # 编译插桩插件
./gradlew app:installDebug # 使用插件编译app代码并插桩
性能优化思路
  1. 减少没有patch的时候所有函数调用损耗
  2. 减少有patch时,但没有走到patch涉及到的类时的损耗
  3. 减少有patch时,走到patch类,但是没走到patch函数时的损耗
  4. 减少有patch时,走到patch类,并走到patch函数时的损耗
  5. 优化patch函数内不包含反射,和包含native反射或java反射的这三种情况
推荐阅读:
  1. 探索安卓热修复框架AndFix的奥秘
  2. 走进热修复框架AndFix的世界

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

android java gradle

上一篇:ubuntu server 12.04 部署初始化实录

下一篇:linux下安装ecshop,

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》