Поиск…


Создание модуля Xposed

Xposed - это структура, которая позволяет вам перехватывать вызовы методов других приложений. Когда вы делаете модификацию путем декомпиляции APK, вы можете вставлять / изменять команды напрямую, где хотите. Однако после этого вам нужно будет перекомпилировать / подписать APK, и вы можете распространять только весь пакет. С помощью Xposed вы можете ввести свой собственный код до или после методов или полностью заменить целые методы. К сожалению, вы можете установить Xposed на корневые устройства. Вы должны использовать Xposed всякий раз, когда вы хотите манипулировать поведением других приложений или базовой системы Android и не хотите проходить через декомпиляцию, перекомпиляцию и подписку APK.

Во-первых, вы создаете стандартное приложение без Activity в Android Studio.

Затем вы должны включить следующий код в свой build.gradle :

repositories {
    jcenter();
}

После этого вы добавляете следующие зависимости:

provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'

Теперь вы должны поместить эти теги в тег приложения, найденный в AndroidManifest.xml, чтобы Xposed распознал ваш модуль:

<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" />

ПРИМЕЧАНИЕ. Всегда заменяйте 82 последней версией Xposed .

Подключение метода

Создайте новый класс, реализующий IXposedHookLoadPackage и реализующий метод handleLoadPackage :

public class MultiPatcher implements IXposedHookLoadPackage
{
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
    {
        
    }
}

Внутри метода вы проверяете loadPackageParam.packageName для имени пакета приложения, которое хотите подключить:

@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
    if (!loadPackageParam.packageName.equals("other.package.name"))
    {
        return;
    }
}

Теперь вы можете подключить свой метод и либо манипулировать им до того, как он будет запущен, либо после:

@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");
        }
    });
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow