【问题标题】:Calling method inside .so shared library on android studio在android studio上的.so共享库中调用方法
【发布时间】:2017-02-06 09:18:59
【问题描述】:

我需要一些帮助才能在 android studio 中使用“.so”(共享库)中的方法“callMethod()”。

我的android studio版本是2.1.3

我在“src/main/”中创建了 jniLibs 文件夹 然后我在 jniLibs 文件夹中创建了三个文件夹:(armeabi, armeabi-v7a, x86) 然后我将 .so 库放在每个提到的文件夹中。 之后,我将 build.gradle 更新如下:

compile fileTree(dir: 'libs', include: ['*.jar','.so'])

在 MainAcrivity java 类中我写了这个:

static {
        System.loadLibrary("SharedLibAndroid");
    }

之后我不知道该怎么办?

我需要解释如何从 .so 库中调用方法“callMethod()”,请举例说明。

我搜索了很多,但没有看到完整的示例。

提前致谢。

我的更新

我已经在我的项目中添加了新的类和原生方法,如下所示:

@SuppressWarnings("JniMissingFunction")
public class Test1Cpp {
static {
    System.loadLibrary("Cpp");
}

public native String callMethod();
}

那我就可以调用.so共享库里面的方法了,

我遇到了另一个问题,即我的 .so 库不适用于所有平台的手机,

错误是:

java.lang.UnsatisfiedLinkError:dlopen 失败: “/data/app/com.mysecondtestapp-1/lib/arm/libCpp.so”有 意外的 e_machine:3

那么,我的问题是:如何将我的 .so 库转换为可在所有平台手机上使用?

【问题讨论】:

    标签: java android-ndk shared-libraries android-studio-2.1


    【解决方案1】:

    我假设库确实加载了,否则你会得到一个异常,我猜你会提到它。所以你需要从库中声明你想使用的本地方法,然后调用它。你可以在这里看到一个简单的例子:Sample: hello-jni

    示例源代码可在此处找到:Hello JNI。

    【讨论】:

    • 感谢 yakobom 的回答,但我没有在您的示例中看到如何加载和使用共享库。另一方面,我需要一些细节如何在 android studio 中链接和使用共享库。
    • 正如我所说,由于您没有指出加载错误,我假设您在加载时没有问题。无论如何 - 我给你的链接指导你需要做的所有事情,但如果你想查看工作示例,请查看源代码(我已经更新了我的答案)
    • 非常感谢@yakobom 的跟进,我看到了 hello-jni 示例和静态 { System.loadLibrary("hello-jni");但是我没有看到生成的共享库(.so),当我删除.c文件时,项目没有运行,它给了我错误:java.lang.UnsatisfiedLinkError: No implementation found for java。 lang.String com.example.hellojni.HelloJni.stringFromJNI() (试过 Java_com_example_hellojni_HelloJni_stringFromJNI 和 Java_com_example_hellojni_HelloJni_stringFromJNI__) 所以,它可能取决于 .c 文件而不是 .so 库
    • 这样的事情有点难以理解 - 如果您仍然有问题,我建议您正确更新您的帖子并提供所有相关详细信息,以便我们尝试帮助您。
    • 我已经更新了我的问题,你能帮我吗@yakobom
    猜你喜欢
    • 2017-10-18
    • 2016-08-02
    • 2016-04-14
    • 2015-11-24
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多