【问题标题】:Can I use prebuilt shared libs(.so) for arm abi in my apk, with no NDK?我可以在我的 apk 中为 arm abi 使用预构建的共享库(.so),而无需 NDK 吗?
【发布时间】:2020-02-04 11:34:49
【问题描述】:

我有一堆预构建的库,可以满足我所有的应用需求。但是,我不想编译任何东西,只需使用共享库中的函数。我应该只将 .so 文件添加到 /app/src/main/jniLibs 并....使用 JNI 函数吗?

【问题讨论】:

    标签: android java-native-interface shared-libraries


    【解决方案1】:

    您不能从 Java 调用本机方法,只能从本机库调用。 JNI 所做的是允许您通过使用 native 关键字标记 Java 方法来连接两个世界,这样调用这些方法就会跳转到本机库中的相应函数。

    “JNI 函数”仅在本机端可用,它们用于检查和操作 Java 对象。例如,有一个 CallVoidMethod 用于调用返回 void 的 Java 方法。

    【讨论】:

    • 那么,如果我在某个类中使用 native 关键字声明了我的 c 函数(由该 .so 库提供),我可以在代码中使用它们吗?
    • 可能不直接:调用约定必须匹配(JVM 传递 JNIEnv*jclassjobject 作为前两个参数),并且您必须专门命名您的函数(类似于Java_pkg_class_method)或使用RegisterNatives 将Java native 方法链接到函数指针。
    • 谢谢。实际上,这个要求现在已经满足了。但是,旧的 .so 库无法正常工作:“dlopen failed: has text relocations”
    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多