bytedance / bytedance/CodeLocator

super.setOnClickListener 也会插桩导致运行时死循环

Open
#93 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.2k
Forks
182
PR merge metrics
No merged PRs in 30d

Description

原始类:
BaseAdView{
public void setOnClickListener(@Nullable View.OnClickListener l) {
this.e = l;
super.setOnClickListener(l);
}
}

插桩后的类
public class BaseAdView extends BaseAdView {

class _lancet {
private _lancet() {
}

@TargetClass(scope = Scope.SELF, value = "android.view.View")
@Proxy("setOnClickListener")
static void com_bytedance_tools_codelocator_lancet_view_ViewLancet_setOnClickListenerSelf(View view, View.OnClickListener onClickListener) {
View view2 = view;
CodeLocator.notifySetOnClickListener(view, Thread.currentThread().getStackTrace());
view.setOnClickListener(onClickListener);
}
}

public void setOnClickListener(View.OnClickListener onClickListener) {
//原始代码是:super.setOnClickListener(onClickListener),这里当成this调用了,导致无限循环
_lancet.com_bytedance_tools_codelocator_lancet_view_ViewLancet_setOnClickListenerSelf(this, onClickListener);
}

}

原因:super.setOnClickListener(onClickListener),这里当成this调用了,导致无限循环

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.