美文网首页
关于andfix的几个坑(持续更新中)

关于andfix的几个坑(持续更新中)

作者: Miyok | 来源:发表于2017-09-06 17:55 被阅读0次

    关于andfix这套热修复框架的用法,相信很多人都查过各种各样的资料,写过各种各样的demo或者已经真正用到自己的项目中。我也是其中一员,只是想把自己碰到的几个问题记录下来,方便碰到同样问题的人。

    1.andfix不能修复与控件相关联的方法

    例如

    <Button
    android:id="@+id/register"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:onClick="login"
    android:text="注册"
    />
    
    public void login(View v){
    int i = 10;
    int j = 0;
    Log.e("old = " + i/j);
    }
    

    改为:

    public void login(View v){
    int i = 10;
    int j = 1;
    Log.e("old = " + i/j);
    }
    

    在现在大部分资料中,是没有说明不能这样修复的。实际上这样无法完成修复,至少无法达到你修改bug的目的。
    点击按钮后报错:

    Process: test.sht.com.testproject, PID: 7103
    java.lang.IllegalArgumentException: Expected receiver of type test.sht.com.testproject.MainActivity_CF, but got test.sht.com.testproject.MainActivity
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:4790)
    at android.view.View$PerformClick.run(View.java:19924)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5400)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
    

    像例子中这样的情况,建议使用setOnClickListener的方式来做,无论是内部类还是实现接口的方式,都可以完成修复。其他情况暂时还没碰到过,应该也是这个思路,去除与控件的关联才行。
    (临时更新:使用xutils的小伙伴注意了,下面这种方式也不行的。)

    @OnClick(R.id.login)
        public void loginClick(View v) {
    ...
    }
    

    2.不建议使用andfix自带的那一套下载、验证、加载的方法。

    虽然andfix为我们考虑的及其周全,但是在实际项目中很难与一个固定的验证流程完全贴合。
    建议自定义下载文件位置,自定义非重复的apatch文件名,自己完成MD5及sign等验证,需要加载修复的时候手动加载,需要删除或清空的时候都手动去做,至少能完全按照我们设计的流程来执行。
    //170906更新

    相关文章

      网友评论

          本文标题:关于andfix的几个坑(持续更新中)

          本文链接:https://www.haomeiwen.com/subject/hlyvjxtx.html