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

更多相关文章

  1. Android进程和应用生命周期
  2. Android进程保活方法 --转自腾讯Bugly公众号
  3. Android菜鸟的成长笔记(22)——Android进程间传递复杂数据(AIDL)
  4. Android 系统(243)---Android进程系列第一篇---进程基础
  5. win10通过网线连接树莓派和PC方法(Android things)
  6. Android root检测方法小结
  7. android之计时器(Chronometer)的使用以及常用的方法
  8. win7与android设备通过蓝牙串口的连接方法

随机推荐

  1. Android TableLayout的使用
  2. Android UI 开发入门—线性布局
  3. android处理单击双击和滑动事件
  4. Android Studio 闪退卡死的问题
  5. android 加载图片并在上面画图
  6. SeekBar的使用
  7. Android事件处理(6)
  8. Android Matrix矩阵详解
  9. android studio使用espresso做自动化测试
  10. Android O system函数执行reboot命令失败