【问题标题】:Jni layer in AndroidAndroid中的Jni层
【发布时间】:2023-04-10 01:25:02
【问题描述】:

我对 Android 系统中的 Jni 层、NDk 层和 C/C++ 源代码组件 LAYER 感到困惑。

在基于 Android 的平台上编写功能时,引入新的自定义组件:

我可以将任何用 c/C++ 编写的组件称为 NDK 组件吗?

什么是jni,一个帮助加载c/C++共享对象的文件?

我参考了以下链接:它讨论了如何使用它,但没有完全阐明 Android 平台中使用的命名约定。 https://developer.android.com/training/articles/perf-jni.html

有人可以澄清一下 JNI、NDK 和 c/c++ 组件之间的区别吗?

【问题讨论】:

    标签: c++ c android-ndk java-native-interface


    【解决方案1】:

    这是一个世界流。
    您有一个用 C/C++ 编写的名为 NativeGoodAlgorithm 的类。
    NativeGoodAlgorithm 编写一个名为 NativeGoodAlgorithmInterface(JNI) 的包装器。
    编写一个 Android.mk 链接您的本机代码和包装器以生成一个库 (.so)。
    在 Android 中,您加载生成的库并编写名为 GoodAlgorithm 的 Java 类。
    然后,您可以随心所欲地调用 GoodAlgorithm

    【讨论】:

      【解决方案2】:

      Java 本地接口 (JNI) 是您从 Java 代码调用 C++ 代码的一种方式,反之亦然。

      Native Development Kit (NDK) 使用 JNI 让您从 Android 应用程序调用 C++。

      您很可能需要做一些工作才能使用 NDK 从 Android 应用调用现有的 C/C++。例如,您必须确保您的 C/C++ 在您想要支持的手机上的 ARM CPU 上运行。您必须定义要在两层之间来回传递的数据结构。我不确定操作系统级调用对于在应用程序中运行的本机代码有哪些限制,但可能有一些限制。

      【讨论】:

      • 如果我使用 c/c++ 语言编写程序,那么我可以将我的组件称为 NDK 组件吗?
      • 我认为不会那么简单。不过,您可以尝试:取一小部分 C++,看看是否可以使用 NDK 从 Android 应用程序调用它。
      • 我的意思是,如果我的组件是用 c/c++ 编写的,我可以将我的组件引用/名称/地址作为 NDK 吗?我可以对大家说我写了一个 NDK 组件吗?
      猜你喜欢
      • 2016-02-22
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2013-03-04
      • 2014-02-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多