Android
Xposed
Szukaj…
Tworzenie modułu Xposed
Xposed jest strukturą umożliwiającą przechwytywanie wywołań metod innych aplikacji. Podczas modyfikacji przez dekompilację pliku APK możesz wstawiać / zmieniać polecenia bezpośrednio w dowolnym miejscu. Musisz jednak później ponownie skompilować / podpisać pakiet APK i możesz dystrybuować tylko cały pakiet. Za pomocą Xposed możesz wstrzyknąć własny kod przed lub po metodach lub całkowicie zastąpić całe metody. Niestety, Xposed można zainstalować tylko na zrootowanych urządzeniach. Powinieneś używać Xposed, gdy chcesz manipulować zachowaniem innych aplikacji lub podstawowego systemu Android i nie chcesz przechodzić przez kłopot związany z dekompilacją, rekompilacją i podpisywaniem plików APK.
Najpierw utwórz standardową aplikację bez działania w Android Studio.
Następnie musisz dołączyć następujący kod do swojego build.gradle :
repositories {
jcenter();
}
Następnie dodajesz następujące zależności:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Teraz musisz umieścić te tagi wewnątrz tagu aplikacji znalezionego w AndroidManifest.xml, aby Xposed rozpoznał twój moduł:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="YOUR_MODULE_DESCRIPTION" />
<meta-data
android:name="xposedminversion"
android:value="82" />
UWAGA: Zawsze zastępuj 82 najnowszą wersją Xposed .
Metoda zaczepiania
Utwórz nową klasę implementującą IXposedHookLoadPackage
i zaimplementuj metodę handleLoadPackage
:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
Wewnątrz metody sprawdzasz loadPackageParam.packageName
dla nazwy pakietu aplikacji, którą chcesz podpiąć:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Teraz możesz podpiąć swoją metodę i manipulować nią przed uruchomieniem kodu lub po:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
XposedHelpers.findAndHookMethod(
"other.package.name",
loadPackageParam.classLoader,
"otherMethodName",
YourFirstParameter.class,
YourSecondParameter.class,
new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
Object[] args = param.args;
args[0] = true;
args[1] = "example string";
args[2] = 1;
Object thisObject = param.thisObject;
// Do something with the instance of the class
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable
{
Object result = param.getResult();
param.setResult(result + "example string");
}
});
}