进入其他应用的进程

创建一个类,继承IXposedHookLoadPackage类,覆写handleLoadPackage方法,xposed的该方法在任何应用启动时都会被调用,故可以进入任何应用程序的进程,但是一般只针对某个特定的应用,例如,只要进入qq的进程:

import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XposedBridge;public class XposedInit implements IXposedHookLoadPackage {    @Override    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {        if (!loadPackageParam.packageName.contains("com.tencent.mobileqq")) //参数:包名            return;        XposedBridge.log("Loaded app: " + loadPackageParam.packageName);    }}
ps: XposedBridge.logLog差不多,Log打印的语句会出现在控制台,而XposedBridge.log的打印会输出到xposed框架的启动程序的日志功能中,要调试的话就要到xposed的日志下查看log输出。 

拦截某个方法

1.拦截com.tencent.mobileqq.app.message.QQMessageFacade类中的a方法,该方法有2个参数,类型分别是ArrayList、boolean。一般拦截用到的回调对象是XC_MethodHook。

findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodHook() {    @Override    protected void afterHookedMethod(MethodHookParam param) throws Throwable {        try {            // 在原先方法执行之后要执行的逻辑代码        } catch (Throwable t) {            XposedBridge.log(t);        }    }});
ps: 方法的拦截分执行前拦截(beforeHookedMethod)和执行后拦截(afterHookedMethod),顾名思义,一个是在方法执行前先执行我们自己的代码,一个是在方法执行后再执行我们自己的代码。

2.如果你根本不行让原来的方法执行,那可以直接对方法的执行逻辑进行替换,回调时使用XC_MethodReplacement对象进行处理即可。

findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodReplacement() {    @Override    protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {        try {            // 直接替换原来要执行的逻辑代码        } catch (Throwable t) {            XposedBridge.log(t);        }    }});
ps:    对于回调过来的参数MethodHookParam param一般有以下2种用处:    param.args[0]:得到被拦截方法的第一个参数,返回值是Object    param.getResult():得到被拦截方法的执行结果,返回值是Object

得到所有已经安装的应用程序

findAndHookMethod("android.app.ApplicationPackageManager", loadPackageParam.classLoader, "getInstalledApplications", int.class, new XC_MethodHook() {    @Override    protected void afterHookedMethod(MethodHookParam param) throws Throwable {        @SuppressWarnings("unchecked")         List applicationInfoList = (List) param.getResult();    }});

得到上下文

try {    Class<?> ContextClass = findClass("android.content.ContextWrapper", loadPackageParam.classLoader);    findAndHookMethod(ContextClass, "getApplicationContext", new XC_MethodHook() {        @Override        protected void afterHookedMethod(MethodHookParam param) throws Throwable {            super.afterHookedMethod(param);            if (applicationContext != null)                return;            applicationContext = (Context) param.getResult();            XposedBridge.log("CSDN_LQR-->得到上下文");        }    });} catch (Throwable t) {    XposedBridge.log("CSDN_LQR-->获取上下文出错");    XposedBridge.log(t);}

未完待续。。。
原文链接(点击文字进入)

更多相关文章

  1. Android(安卓)利用程序实现GPS的打开或关闭
  2. Android消息机制(Handler、Looper、MessageQueue)
  3. Android(安卓)QuickSetting---手电筒控制
  4. Android:inflate.inflate()方法
  5. Android(安卓)UI编程(1)——九宫格(GridView)
  6. ListView与BaseAdapter优化
  7. Android(安卓)使用OKHttp获取字符串和下载图片
  8. Android(安卓)Force Close 出现的异常原因分析及解决方法
  9. Android对话框AlertDialog.Builder使用方法

随机推荐

  1. Android注解及反射实战--手写ButterKnife
  2. Android(安卓)蓝牙调色灯/zigbee调色灯学
  3. Android(安卓)Accessibility(辅助功能) -
  4. 如何发布你的Android应用程序
  5. Android屏幕适配总结终极方案
  6. Android_TextView属性XML详解
  7. Android测试驱动开发实践1
  8. Android计算器——入门
  9. Android(安卓)ADT,SDK的安装,让人烦恼的在
  10. 我和我的Android