【问题标题】:How to use .so file in Xposed module project?如何在 Xposed 模块项目中使用 .so 文件?
【发布时间】:2016-05-28 05:00:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多