package com.wuxiaosu.wechathelper.hook; import android.annotation.SuppressLint; import android.widget.Button; import com.wuxiaosu.wechathelper.utils.Constant; import com.wuxiaosu.widget.utils.PropertiesUtils; import java.lang.reflect.Field; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; /** * Created by su on 2018/05/13. * 自动登录 */ public class ExtDeviceWXLoginUIHook { private boolean pcAutoLogin; private ExtDeviceWXLoginUIHook() { } private ClassLoader classLoader; public void init(ClassLoader classLoader, String versionName) { if (this.classLoader == null) { this.classLoader = classLoader; hook(classLoader); } } public static ExtDeviceWXLoginUIHook getInstance() { return ExtDeviceWXLoginUIHook.SingletonHolder.instance; } private static class SingletonHolder { @SuppressLint("StaticFieldLeak") private static final ExtDeviceWXLoginUIHook instance = new ExtDeviceWXLoginUIHook(); } private void hook(final ClassLoader classLoader) { pcAutoLogin = Boolean.valueOf(PropertiesUtils.getValue(Constant.PRO_FILE, "pc_auto_login", "false")); if (!pcAutoLogin) { return; } try { final Class extDeviceWXLoginUIHookClazz = XposedHelpers.findClass("com.tencent.mm.plugin.webwx.ui.ExtDeviceWXLoginUI", classLoader); XposedHelpers.findAndHookMethod(extDeviceWXLoginUIHookClazz, "initView", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { Object object = param.thisObject; Field[] fields = extDeviceWXLoginUIHookClazz.getDeclaredFields(); for (Field field : fields) { Object objectField = XposedHelpers.getObjectField(object, field.getName()); if (objectField instanceof Button && ((Button) objectField).getText().toString().equals("登录")) { ((Button) objectField).callOnClick(); break; } } super.afterHookedMethod(param); } }); } catch (Error | Exception e) { XposedBridge.log(e); } } }