Xposed模拟操作第三方应用的控件

本文介绍了如何使用Xposed框架来模拟操作第三方应用,包括设置输入框的值、点击按钮以及操作密码键盘输入密码。详细讲解了通过查找EditText、调用performClick方法以及拦截TextView的onAttachedToWindow方法来实现这些功能。
摘要由CSDN通过智能技术生成
  1. 使用Xposed设置第三方应用的输入框的值;
  2. 使用Xposed点击第三方应用的按钮;
  3. 使用Xposed操作密码键盘输入密码;

一、使用Xposed为设置第三方应用的输入框的值

思路:找到EditText对象,再为EditText设置值即可;

第三方应用控件查找EditText源码:

public class WithdrawActivity_ extends BaseActivity {
   
        @ViewById(resName="withdrawalsMoney") protected APInputBox c;
        @ViewById(resName="confirm_btn") protected Button d;
        
        public final void onViewChanged(HasViews arg2) {
   
            ……
            this.c = arg2.findViewById(R$id.withdrawalsMoney);  //输入框对象查找
            this.a = arg2.findViewById(R$id.titleBar);
            this.h = arg2.findViewById(R$id.withdrawAmountTitleView);
            this.b = arg2.findViewById(R$id.withdrawAll);
            this.a();
        }
    
}

可以通过控件查找时拦截获取EditText对象,但是输入框对象是属于APInputBox类型的,比没有setText()方法,不能给输入框设置值

最后发现通过this.c.getEtContent()可以获取EditText对象。最后在调用setText方法即可设置值了。

EditText editText = (EditText) XposedHelpers.callMethod(XposedHelpers.findField(activity.getClass(), "c").get(activity), "getEtContent", new Object[0]);

editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.setText((“abcd”));

二、使用Xposed点击第三方应用的按钮

思路:找到Button对象,再调用performClick方法模拟点击;
performClick()方法 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件)

Button comfirBtn = (Button) XposedHelpers.findField(activity.getClass(), "d").get(activity);
comfirBtn.setEnabled(true);
comfirBtn.performClick();

activity为Xposed拦截的当前页面的实例对象,可通过param.thisObject获取。
变量d为activity页面的button对象,通过反射方法可以获取button的值,但是前提c已经被赋值,否则获取到的对象为null。

MethodHookParam.thisObject:这个类的一个实例;
MainActivity activity = (MainActivity) param.thisObject;
可以通过 param.thisObject 获取当前的Activity,从而获取 当前的所有变量

三、使用Xposed操作密码键盘输入密码

思路:拦截获取到密码接收的TextView,密码TextView可以根据当前获取到的TextView的对象节点是否包含需要的Id来定位到密码TextView,最终调用setText方法设置密码

XposedHelpers.findAndHookMethod("android.widget.TextView", classLoader, "onAttachedToWindow", new XC_MethodHook()
        {
   
            protected void afterHookedMethod(MethodHookParam arg8)
            {
   
                final TextView textView = (TextView) arg8.thisObject;//获取View对象
                String v1 = textView.toString();
                LogUtil.logic_i(String.valueOf(v1) + ",text:" + textView.getText() + ", context:" + textView.getContext().toString());
                if (v1.contains("com.alipay.android.phone.safepaybase:id/mini_spwd_input"))
                {
   
                    textView
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值