android有很多hook框架,原理都是大同小异。本文是使用YAHFA。
YAHFA 的github地址:https://github.com/PAGalaxyLab/YAHFA

一 、准备工作

  项目的build.gradle中添加mavenCentral()

buildscript {    repositories {        mavenCentral()    }}allprojects {    repositories {        mavenCentral()    }}

  model的build.gradle添加引用

dependencies {    implementation 'io.github.pagalaxylab:yahfa:0.10.0'}

做好上面两步就可以接着开发了。

二、HookMain.hook方法
本文的例子中,只需要用到HookMain.hook这一个方法。

HookMain.hook(Method target, Method hook)

需要传入两个method参数,“Method target”是想要hook的方法,“Method hook”是想要真正运行的方法。
举例:
Log.i(String, String)的作用是打印一行日志

Log.i("hook", "aaaaaaa");

输出: I/hook: aaaaaaa

但是如果我创建一个"i"方法,将系统提供的Log.i(…)替换掉,那么在应用任何地方调用log.i都会执行我创建的方法,而不是系统方法。
首先,我照着Log.i也创建一个“i”方法,同样是static修饰,但是里面不用log输出日志了,而是用System.out.println输出日志:

    public static int i(String s1,String s2){        System.out.println("hook 哈哈哈");        return 0;    }

然后hook掉原方法,使用反射取出method传入HookMain.hook中:

try {            //取出系统方法            Class logClass = Log.class;            Method target = logClass.getDeclaredMethod("i", String.class, String.class);            //取出创建的i方法            Class mclass = MainActivity.this.getClass();//新创的“i”方法的类。这里我是放到MainActivity中的            Method hook = mclass.getDeclaredMethod("i", String.class, String.class);            HookMain.hook(target,hook );        } catch (Exception e) {            e.printStackTrace();        }

执行完这一步后,就已近hook成功了。再次调用Log.i("hook", "aaaaaaa")看控制台结果:

执行:Log.i(“hook”, “aaaaaaa”)`
输出: I/System.out: hook 哈哈哈

更多相关文章

  1. Android(安卓)SimapleDateFormat 日期格式的转换方法
  2. 【解决方法】ADT在线安装
  3. Android(安卓)横竖屏的锁定
  4. Android(安卓)字体加粗的两种方法
  5. android Uri获取真实路径转换成File的方法
  6. Android×××方法详解
  7. Android(安卓)进阶16:IntentService 使用及源码解析
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 转贴 Android 开发之旅:又见Hello World!
  2. android GPS开发实践
  3. Android 滑动侧边栏(Sliding Menu)第一种实
  4. android的四层体系结构,基于mvc三层结构浅
  5. Android图片转换
  6. Android实现用代码简单安装和卸载APK的方
  7. Android 事件冒泡及捕获
  8. android:imeOptions指定了弹出键盘时右下
  9. Android设置一个按钮右对齐
  10. Android应用商店——Splash页面的实现,And