如何将此 Hello-JNI 项目https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F..%2Findex#0 转换为 Xposed 模块并使用挂钩方法中的方法“getMsgFromJni”?
问问题
900 次
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 回答