HotFix icon indicating copy to clipboard operation
HotFix copied to clipboard

若有一个activity类需要修复,尝试dx打包之后不可以使用

Open cby0310 opened this issue 8 years ago • 3 comments

若有一个activity类需要修复,尝试dx打包之后修复的代码(模拟修复了按钮点击事件中为btn设置的文本和toast的文本)无效,并且反编译之后的代码和 apk原来的代码反编译只有有很大差异,为什么?大家遇到过吗? dx手工打包反编译得: package dodola.hotfix;

import android.app.Activity; import android.os.Bundle; import android.widget.Button;

public class LoginActivity extends Activity { protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130968601); Button localButton = (Button)findViewById(2131492975); LoginActivity.1 local1 = new LoginActivity.1(this, localButton); localButton.setOnClickListener(local1); } }

apk反编译得:

package dodola.hotfix;

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast;

public class LoginActivity extends Activity { public LoginActivity() { }

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(2130968601);
    final Button btn = (Button)this.findViewById(2131492975);
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            btn.setText("ddddddd   rr");
            Toast.makeText(LoginActivity.this, "111   rr", 1).show();
        }
    });
}

}

cby0310 avatar Jul 15 '16 03:07 cby0310

经过进一步的尝试,发现如下情况: 1.若不通过匿名内部类的方式注册点击事件,是可以达到修复的效果的 2.若还通过匿名内部类,但是将点击事件抽取为一个单独的方法也是可以达到修复效果的 这个的原因我想是dx打包时造成的,不知道具体是什么情况

cby0310 avatar Jul 15 '16 07:07 cby0310

你好 请教一下 你是怎么编译activity.java 转成 .class文件的

zxp0505 avatar Nov 16 '16 11:11 zxp0505

把匿名内部类的class 一起打进去 Activity$1.class 之类的

Mars212 avatar Nov 24 '16 05:11 Mars212