gpt4 book ai didi

java - Android loadLibrary.so调用方法和构造函数

转载 作者:行者123 更新时间:2023-12-02 02:46:16 25 4
gpt4 key购买 nike

我已经检查过这里,它似乎没有回答我的特定问题。我知道我可以使用 C .so 库并通过稍微重写库 native 方法来引用其中的方法,如下所示:

@SuppressWarnings("JniMissingFunction")
public class MyNativeMethods {
static {
System.loadLibrary("libraryWithSoExtension");
}
public native boolean init();
}

我的问题是我想调用这个库中的构造函数。该库仅包含几个类,其中每个类包含 1 或 2 个方法。我从这里看到:

How to call methods on .so library in Android studio

我不需要任何 h、c 或 jni(我真的吗?)。

问题:

  1. 您能否确认我不需要任何 JNI 文件即可从 .so 文件访问 native 方法?
  2. 是否可以实际访问上述构造函数以及如何导入(如果可能)
  3. MAVEN/GRADLE - a 不适用于 .so 文件,这是正确的吗?它在 gradle 中也等效吗?

提前谢谢您。

最佳答案

如果您有一个预构建的 .so 文件,该文件实现了一些 native 方法,则不需要它的源代码来在 Android Studio 中构建您的项目。

问题是 native 方法和包含这些方法的类的名称是硬编码的,例如Java_com_example_test_MainActivity_stringFromJNI共享库中的导出函数libmy.so适合

package com.example.test;
public class MainActivity extends Activity {
static {
System.loadLibrary("my");
}
public native String stringFromJNI();
}

而不是其他 Java 类或方法(有一些工具可以使此类逆向工程变得更加困难)

您可以使用javah命令为您的 native 方法生成 C 声明,但它无法对适合给定库的 Java 类进行反向工程。但如果您确实需要的话,它会让您声明一个 native 构造函数。

Android Studio 的 Gradle 插件将打包 src/main/jniLibs 中的 so 文件到您的 APK 中,除非您在 build.gradle 中设置不同的 jniLibs.srcDir 目录。

关于java - Android loadLibrary.so调用方法和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com