Xposed实际工作中更有趣的方式,它通过添加一个罐子(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar
要准确),它允许您“挂钩”,以任何方法调用修改/system/bin/app_process
。基本上,你可以在任何方法之前或之后运行你自己的代码。下面是the GitHub page一些示例代码:
package de.robv.android.xposed.mods.tutorial;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import android.graphics.Color;
import android.widget.TextView;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Tutorial implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals("com.android.systemui"))
return;
findAndHookMethod("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader, "updateClock", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
TextView tv = (TextView) param.thisObject;
String text = tv.getText().toString();
tv.setText(text + " :)");
tv.setTextColor(Color.RED);
}
});
}
}
这挂接到系统UI时钟更新方法,并增加了:)
的时间,再加上使文本显示为红色。希望这可以让你对Xposed的工作方式有所了解。
有意义的好处是你不会取代原来的应用程序,所以不需要解压缩符号推送程序。只要有原始的应用程序,Xposed框架和你的模块。
编辑此外,只是解压缩和替换PNG不会让你访问工作代码,这就是为什么在状态栏中的网络速度是需要你使用Xposed的 - 你必须“深入”代码创建状态栏中显示的文本。
谢谢!在我完成开发教程后,它更加清晰,但“钩子”机制的工作方式仍然让我感到困惑。我认识到在jni中实现了钩子。我是否应该学习其他知识来理解这种机制? – Zhang