码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2014-11-27 09:14:53      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:android   blog   http   ar   os   java   art   问题   log   

在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,就可以把方法拦截适用到任意进程了。

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

标签:android   blog   http   ar   os   java   art   问题   log   

原文地址:http://blog.csdn.net/a345017062/article/details/41541441

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!