您的位置:首页 > 移动开发 > Android开发

在Android App开发中实现任意Java方法的拦截

2014-11-27 09:10 309 查看
了解老码农个人隐私,请看这里:http://www.koulianbing.com/?page_id=12

在Android的App开发过程中,经常会有一些导致App进程崩溃的Framework层Bug,比如这里讲的Cookie同步引起的崩溃等问题。这种情况下,我们如果能拦截到Framework层的Api调用,对它做个包装把异常捕捉住,就可以避免这个问题了。

当时,纯Java层是做不到的,而Java中的Proxy机制也只能针对自己定义的类,系统Framework层的类就不管用了。这里面说一种通过借鉴Java的JNI机制来实现进程类任意Java方法拦截。

任何一个Java方法在C++层都对应一个Method类,如果是JNI方法的话,Method类的成员变量nativeFunc指向的就是JNI的Native实现,如果不是JNI方法,则指向Java方法实现,并调用dvmInterpret执行该Java方法。利用这种机制,我们就可以实现方法拦截了。假设我们有一个Java层方法Java_Method需要Hook,我们就把Hook方法Java_Method_Hook提供给Java_Method的C层Method,放放到其成员变量ins中。接下来再定义一个C层方法C_hookHandler,把这个方法赋给Method的nativeFunc成员变量,然后,当C_hookHandler被调用时,就可以通过调用ins成员变量中的Java_Method_Hook来做到对Java_Method拦截了。

更加详细和系统化的流程,可以参考下面这篇文章,或者Xposed源代码。
http://blog.csdn.net/luoshengyang/article/details/8914953
Xposed最大的不同是通过替换app_process来实现了对其它进程的Hack,就可以把方法拦截适用到任意进程了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐