标签:
使用cydia框架编写cydia hook插件的时候由于initialize方法是无参的静态方法,所以不能获取上下文因此很多事情直接在initialize方法里就干不了,比如toast,发送广播等。由于hook是改变其他的类的API的执行结果。所以可以使用HOOK的那个类来获取context从而达到可以使用toast等的目的。
办法:
1 MS.hookMethod(arg0, toast, new MS.MethodAlteration() { 2 3 @Override 4 public Object invoked(Object arg0, Object... arg1) 5 throws Throwable { 6 Toast.makeText(((Activity)arg0).getApplicationContext(), "test", Toast.LENGTH_LONG).show(); 7 invoke(arg0, "hook before"); 8 invoke(arg0, arg1); 9 invoke(arg0, "hook end"); 10 return null; 11 } 12 });
参数arg0就是最后HOOK的那个类的一个实例,利用她可以获取她里面的方法,由于我这里HOOK的类是Activity类型,所以可以获取Context.
标签:
原文地址:http://www.cnblogs.com/xushihai/p/4503439.html