0

この Hello-JNI プロジェクトhttps://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F..%2Findex#0 を Xposed モジュールにして使用する方法フックメソッド内のメソッド「getMsgFromJni」?

4

1 に答える 1

1

Xposed が既にこの機能をサポートしているかどうかはわかりませんが、.so をアプリのネイティブ ライブラリ フォルダーに配置するか、Android の DexClassLoader をフックしてライブラリをロードすることができるはずです。

クラスローダーを使用して、.so ファイルを他のアプリに正常にロードしました。私のソリューションは良いユースケースになる可能性があるので、あなたが望むようにする方法を見つけることができます。基本的に、ライブラリを /data/local/tmp/natives に配置してから、次のようにしました。

//JNI classes are in data/local/tmp/dexjars/
File[] files = new File("data/local/tmp/dexjars/" + type + "/").listFiles();

//Folder to store optimized dex code
String hash = "dex" + lpparam.packageName.hashCode();

//In case you want to have several packages to load
for (File file : files) {

    final File tmpDir = new File("data/local/tmp/optdexjars/" + hash + "/");

    tmpDir.mkdirs();

    //Create a DexClassLoader that links yo your native libraries   
    final DexClassLoader classloader = new DexClassLoader(
                        file.getAbsolutePath(), tmpDir.getAbsolutePath(),
                        "data/local/tmp/natives/",
                        ClassLoader.getSystemClassLoader());

    //Retrieve your classes performing the JNI
    Class c = Class.forName("FULLY_QUALIFIED_JNI_CLASSNAME", true, classloader);
}

機能をパッケージ化する方法の詳細が必要な場合は、こちらをご覧ください。

もっと簡単な方法を見つけたら、投稿してください。

幸運を!

于 2016-06-03T10:04:06.987 に答える