サーチ…


Xposedモジュールの作成

Xposedは、他のアプリケーションのメソッド呼び出しをフックできるフレームワークです。 APKを逆コンパイルして変更すると、必要な場所に直接コマンドを挿入/変更できます。ただし、後でAPKを再コンパイル/署名する必要があり、パッケージ全体を配布することしかできません。 Xposedを使用すると、メソッドの前後に独自のコードを挿入したり、メソッド全体を完全に置き換えることができます。残念ながら、Xootはrootedデバイスにのみインストールできます。他のアプリやコアAndroidシステムの動作を操作したい場合や、APKの逆コンパイル、再コンパイル、署名の手間を省きたい場合は、必ずXposedを使用してください。

まず、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メソッドを実装し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