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