Android Protect-0.Xposed开发教程(官方Helpers)


Xposed中有许多Helper方法使得模块的开发变得更为简单。

XposedBridge类

 

log

log方法是将调试输出记录到标准logcat和名为/data/xposed/debug.log的文件的简单方法。 它可以采用日志消息或Throwable。 在后一种情况下,它将打印堆栈跟踪。

 

hookAllMethods / hookAllConstructors

如果要将具有特定名称的所有方法或类中的所有构造函数挂钩,你可以使用这两种方法。当有许多不同的变量,可是你希望在它们当中任何一个被调用之前/后都执行一段代码时,这是非常有用的。时刻记住,其它的ROM也许有额外的变量同样也被hook。尤其小心你在回调时得到的args

 

XposedHelpers类

我建议把这个类添加到Eclipse的静态导入的偏好设置中:Window => Preferences => Java => Editor => Content Assist => Favorites => New Type,输入:de.robv.android.xposed.XposedHelpers。这样做的话,eclipse在你开始输入“get…”时会自动提示这个类中的方法,并且会创建这个方法的静态导入(这意味着在你的代码中是看不到类名的)。

 

findMethod / findConstructor / findField

有许多你不必亲自使用反射获得方法、构造函数和字段的方式。同样,你也可以对几个特定参数种类使用“最佳匹配”来寻找方法和构造函数。例如:你可以用一个TextView类型的参数来调用findMethodBestMatch(Class<?> clazz, String methodName, Object... args)。如果没有更加符合匹配的变量,这同样会找到一个具有你指定的名称而且以View类型对象作为参数的方法。

 

callMethod / callStaticMethod / newInstance

利用上文提到的findXXX方法,这些方法使得调用方法和创建一个类的实例变得简单。调用者不必为此而使用反射。没有必要事先就取得某个方法,只要及时使用以上的这些方法调用它就可以了。参数类型是从实际的参数值和最匹配的被调用方法中自动拷贝而来。万一你想明确的指出参数的类型,创建一个Class<?>数组,然后把它传递给callXXX/newInstance。你可以使数组中的一些项为空(null)来使用实际参数的类型。但是数组的长度必须和参数的个数匹配。

 

getXXXField / setXXXField / getStaticXXXField /setStaticXXXField

它们是让你能够轻易获得和设置对象实例和类变量内容的封装器。你只需要对象的引用、字段名、和类型(当然还有提供给setter的新值)。如果你想获得/设置一个静态字段,并且没有对象的引用,你可以使用getStaticXXXsetStaticXXX方法。然而当你有一个对象的引用时,区分静态和实例字段是没有必要的。getXXXsetXXX可以给两者都设定值。

 

getAdditionalXXXField / setAdditionalXXXField

这些方法让你将任何值与一个对象的实例或是整个类(像是一个静态字段)联系起来。这些值依照关键字-值对的方式存储。所以每个对象可以存储多个值。关键字可以是任何字符串,包括对象实际拥有的字段的名称。请注意你不能通过调用getAdditionalInstanceField获取你之前用setAdditionalStaticField存储的值。取而代之的是应该使用getAdditionalStaticField。它有一个变量来接受对象并自动查询它的类。

 

assetAsByteArray

这个方法以byte数组的形式返回资源。如果你想加载你模块的资源,你可以使用以下代码:

public class XposedTweakbox implements IXposedHookZygoteInit {
	@Override
	public void initZygote(StartupParam startupParam) throws Throwable {
		Resources tweakboxRes = XModuleResources.createInstance(startupParam.modulePath, null);
		byte[] crtPatch = assetAsByteArray(tweakboxRes, "crtfix_samsung_d506192d5049a4042fb84c0265edfe42.bsdiff");
...

 

getMD5Sum

返回文件系统中一个文件的MD5值。当前的app需要获取读这个文件的权限(在init方法中你拥有root权限,所以这应该不是什么问题)。

 

getProcessPid

按照进程的/proc/[pid]/cmdline的第一部分来寻找这个进程,并以字符串形式返回它的PID

参考:
https://github.com/rovo89/XposedBridge/wiki/Helpers
https://blog.csdn.net/zhangmiaoping23/article/details/54891457

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值