Android
Xposed
Suche…
Erstellen eines Xposed-Moduls
Xposed ist ein Framework, mit dem Sie Methodenaufrufe anderer Apps verknüpfen können. Wenn Sie eine Änderung vornehmen, indem Sie eine APK dekompilieren, können Sie Befehle direkt an beliebigen Stellen einfügen / ändern. Sie müssen die APK danach jedoch erneut kompilieren / signieren, und Sie können nur das gesamte Paket verteilen. Mit Xposed können Sie Ihren eigenen Code vor oder nach Methoden einfügen oder ganze Methoden vollständig ersetzen. Leider können Sie Xposed nur auf gerooteten Geräten installieren. Sie sollten Xposed immer dann verwenden, wenn Sie das Verhalten anderer Apps oder des Android-Kernsystems ändern möchten und nicht die Mühe machen müssen, APKs zu dekompilieren, neu zu kompilieren und zu signieren.
Zunächst erstellen Sie eine Standard-App ohne Aktivität in Android Studio.
Dann müssen Sie den folgenden Code in Ihr build.gradle einfügen :
repositories {
jcenter();
}
Danach fügen Sie die folgenden Abhängigkeiten hinzu:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Jetzt müssen Sie diese Tags innerhalb des Anwendungstags in AndroidManifest.xml platzieren, damit Xposed Ihr Modul erkennt:
<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" />
HINWEIS: Ersetzen Sie immer 82 durch die neueste Xposed-Version .
Eine Methode haken
Erstellen Sie eine neue Klasse, die IXposedHookLoadPackage
implementiert, und implementieren Sie die handleLoadPackage
Methode:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
Innerhalb der Methode überprüfen Sie loadPackageParam.packageName
auf den Paketnamen der App, die Sie loadPackageParam.packageName
möchten:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Jetzt können Sie Ihre Methode anhängen und entweder bearbeiten, bevor der Code ausgeführt wird oder nach:
@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");
}
});
}