首页 > 移动平台 > 详细

Android Hook Instrumentation

时间:2020-04-09 15:57:32      阅读:133      评论:0      收藏:0      [点我收藏+]

 

要替换的Instrumentation类:

public class MyInstrumentation extends Instrumentation {

    private static final String TAG = MyInstrumentation.class.getSimpleName();

    private Instrumentation base;

    public MyInstrumentation(Instrumentation base) {
        super();
        this.base = base;
    }

   // 返回值改成true, 重写异常处理方法,在遇到异常时,程序不崩溃, @Override
public boolean onException(Object obj, Throwable e){ e.printStackTrace(); return true; } @Override public Activity newActivity(ClassLoader cl, String className, Intent intent) throws InstantiationException, IllegalAccessException, ClassNotFoundException { try { intent.setExtrasClassLoader(cl); intent.getBooleanExtra("a",false); }catch (Exception e){ e.printStackTrace(); } Log.e(TAG,"className " + className);return super.newActivity(cl,className, intent); } }

 

Hook工具类:

public class Hooker {
    public static final String TAG = "Hooker";

    public static void hookInstrmentation(){
        Class<?> activityThread;
        try{
            activityThread = Class.forName("android.app.ActivityThread");
            Method sCurrentActivityThread = activityThread.getDeclaredMethod("currentActivityThread");
            sCurrentActivityThread.setAccessible(true);
            //获取ActivityThread 对象
            Object activityThreadObject = sCurrentActivityThread.invoke(activityThread);

            //获取 Instrumentation 对象
            Field mInstrumentation = activityThread.getDeclaredField("mInstrumentation");
            mInstrumentation.setAccessible(true);
            Instrumentation instrumentation = (Instrumentation) mInstrumentation.get(activityThreadObject);
            MyInstrumentation customInstrumentation = new MyInstrumentation(instrumentation);
            //将我们的 customInstrumentation 设置进去
            mInstrumentation.set(activityThreadObject, customInstrumentation);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

替换:

public class GlobalApplication extends android.app.Application {

    @Override
    protected void attachBaseContext(Context base) {
        Hooker.hookInstrmentation();   //替换操作
        super.attachBaseContext(base);
    }

}

 

Android Hook Instrumentation

原文:https://www.cnblogs.com/roger-jc/p/12667282.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!