android中的热修复

热补丁方案,比较知名的有腾讯Tinker,阿里的Andfix,美团的Robust,以及Qzone的超级补丁方案。

注意,如果开启了混淆,要替换的是混淆后的类。比如我们的utils类。我们通过debug- > mapping.txt文件查看,被混淆成了a类。那么,我们的补丁包,则需要写a类。

大家可以看到,当使用类替换的方式,就必须重启,不能立即生效。

AndFix现在已经被淘汰了。但是可以学习下它的原理。它是在native层动态替换java层的方法,通过native层hoot java层的代码。

 AndFix使用自定义注解的方式来指定有bug的方法:

public class Test {
    @MethodReplace(class="com.example.myapplication.Test",method="test")
    public void test(){
    }
}

它的原理:

当拿到我的补丁包Test.使用类加载,拿到Test.class,然后再用反射再遍历这个类的所有方法。拿到Method对象获取到方法test。然后再反射拿到注解。拿到注解后,再拿到class以及method参数。然后就可以进行方法的替换。

猜你喜欢

转载自blog.csdn.net/howlaa/article/details/128709487