在Android App开发中实现任意Java方法的拦截
来源:互联网 发布:珠海网络教育报名 编辑:程序博客网 时间:2024/06/07 23:06
在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 0
- 在Android App开发中实现任意Java方法的拦截
- java中,自定义注解拦截器来实现,在需要的拦截的方法上面加上一个注解@AccessRequired
- Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
- S2SH开发中拦截器的方法拦截的实现 MethodFilterInterceptor?
- Android App开发--电话拦截
- Java解决在浏览器地址栏中输入url访问action的问题以及拦截方法过滤的简易实现
- Java解决在浏览器地址栏中输入url访问action的问题以及拦截方法过滤的简易实现
- 【JAVA开发技术进阶】 Java实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)
- Android 来电拦截的开发实现
- 在Android Studio中 修改APP包名的方法
- 定义一个函数,在该函数中可以实现任意两个整数的加法。java实现
- 在Android App中实现Gmail样式的翻页效果
- 在android中实现iphone时钟app的秒表功能
- Android Studio中拦截电话的方法
- Android开发:在onTouchEvent中处理任意时间的长按事件
- Android开发:在onTouchEvent中处理任意时间的长按事件
- Android开发:在onTouchEvent中处理任意时间的长按事件
- 在Android的App中动态的加载Java类
- HDU3466 - Proud Merchants(贪心+01背包)
- NeHe OpenGL Lesson 9
- Android studio关联源码
- 天天ASP开发网完成中国仡佬族文化研究会网站建设
- oracle中一张表对应使用的段里的存储空间碎片的整理
- 在Android App开发中实现任意Java方法的拦截
- poj3259 bellman—ford
- 求矩阵的外围元素之和,主对角线元素之和以及副对角线元素之和
- KeyChain的用途
- Eclipse修改tomcat输出路径配置
- 链表的中间结点
- 字符大小写的转换
- 命运女神不在天上
- 一段有意思的代码