Xposed фактически работает более интересным способом, он изменяет /system/bin/app_process
, добавив банку (/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar
, если быть точным), что позволяет «подключить» к любому вызову метода. В принципе, вы можете запускать свой собственный код до или после любого метода. Вот несколько примеров кода из 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);
}
});
}
}
Это перехватывает в метод обновления синхронизации пользовательского интерфейса системы и добавляет :)
к тому времени, а также делает текст красным. Надеюсь, это даст вам некоторое представление о том, как все работает в Xposed.
Невероятное преимущество заключается в том, что вы не заменяете оригинальное приложение, поэтому не требуется процедура разблокировки подписей. Просто у вас есть оригинальное приложение, Xposed framework и ваш модуль.
Редактировать: Кроме того, просто распаковка и замена PNG не даст вам доступа к рабочему коду, поэтому скорость сети в строке состояния - это то, что требует от вас использования Xposed - вам нужно «закопать» код, который создает текст, который отображается в строке состояния.
Спасибо! Это намного яснее после того, как я прошел учебное руководство по разработке, но то, как работает механизм «крюка», все еще меня смущает. Я пришел к тому, что в jni достигнут крючок. Есть ли еще какие-нибудь другие знания, которые я должен понять, чтобы понять этот механизм? – Zhang