Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed
Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子:
public class WebViewHook implements IXposedHookLoadPackage { // handleLoadPackage 会在android加载每一个apk后执行 public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { // 可以从lpparam中获取当前apk的名字 if (! lpparam.packageName.equals("com.tencent.mobileqq")) { return; } XposedBridge.log("WebViewHook handleLoadPackage: " + lpparam.packageName); // 勾住 WebView 所有的构造器 XposedBridge.hookAllConstructors(WebView.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 打开webContentsDebuggingEnabled XposedHelpers.callStaticMethod(WebView.class, "setWebContentsDebuggingEnabled", true); XposedBridge.log("WebViewHook new WebView(): " + packageName); } }); } }
上面的代码可以为QQ打开WebView的webContentsDebuggingEnabled
参考文档:
Xposed工作原理可以
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
没有详细的API页面, 因为API也就几个,可以查看源代码: https://github.com/rovo89/XposedBridge/tree/master/src/de/robv/android/xposed

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《Android 网络开发与应用实战详解》——1.2节蓬勃发展的手机上网产业
本节书摘来自异步社区《Android 网络开发与应用实战详解》一书中的第1章,第1.2节蓬勃发展的手机上网产业,作者 王东华,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.2 蓬勃发展的手机上网产业Android 网络开发与应用实战详解手机上网是指利用支持网络浏览器的手机通过WAP协议,同互联网相联,从而达到网上冲浪的目的。手机上网具有方便性、随时随地性,已经越来越广泛,逐渐成为现代生活中重要的上网方式之一。 1.2.1 WAP技术介绍WAP(Wireless Application Protocol)无线应用协议是一个开放式的标准协议,可以把网络上的信息传送到移动电话或其他无线通信终端上。WAP是由爱立信(Ericsson)、诺基亚(Nokia)、摩托罗拉(Motorola)等通信业巨头在1997年成立的无线应用协议论坛(WAP Forum)中所制定的。它使用一种类似于HTML的标记式语言WML(Wireless Markup Language),并可通过WAP Gateway直接访问一般的网页。通过WAP,用户可以随时随地利用无线通讯终端来获取互联网上的即时信息或公司网站...
- 下一篇
《Swift 权威指南》——第6章,第6.8节输入输出参数
本节书摘来自异步社区《Swift 权威指南》一书中的第6章,第6.8节输入输出参数,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.8 输入输出参数 函数的参数都是值传递,即使参数是变量,在函数体内修改了参数值,当函数结束后,也不能将修改结果保留。如果要想利用参数传递值,可以用inout关键字将参数修改为输入输出参数。这样在函数体内修改该参数值后,当函数结束后,仍然可以保留修改的结构。 // name是输入输出参数 func process7(inout name:String, age:Int) -> String { name = "Mike" return "Name:" + name + "Age:" + String(age) } var name:String = "bill" println(process7(&name, 40)); // 输出name最后的值 println(name) 在传递输入输出参数值时应注意如下几点。 指定输入输出参数值时必须使用变量,不能使用常量或值。指定变量时前面需要加&。在声明变量时,必须初始化。...
相关文章
文章评论
共有0条评论来说两句吧...