如何在Xposed模块项目中使用.so文件?

时间:2016-05-28 05:00:09

标签: android-studio android-ndk java-native-interface xposed-framework xposed

如何启用此Hello-JNI项目https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F..%2Findex#0 到一个Xposed模块并在钩子方法中使用方法“getMsgFromJni”?

1 个答案:

答案 0 :(得分: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);
}

如果您需要有关如何打包功能的详细信息,请查看here

如果您发现如何以更简单的方式进行操作,请发布。

祝你好运!