在 Android 上使用 C/C++ 库

Dre*_*Box 6 java-native-interface android android-ndk

我编写了一个库,通过 c/c++ 编程语言提供一些函数加、减、除、多。它是使用Android NDK构建到library.so中的。所以现在,我想使用Android来调用库的这些函数。我想要作为我该怎么办?

感谢。

joh*_*y68 1

这里

\n

NDK包

\n

Android Studio仅包含默认工具和SDK,因此需要单独下载并安装NDK包。有两种方法可以做到这一点。第一个也是最简单的是“SDK 工具”选项卡中的自动安装选项。这是一个很大的下载(~1GB),所以一定要有良好的互联网连接和/或耐心。

\n

在此输入图像描述

\n

第二种方法是从 NDK下载页面手动下载 NDK 。由于下载大小较小(<.5 GB),这可以节省一些时间,但需要一些设置。下载适合您平台的 NDK 包并按照安装说明进行操作。您可以将解压的包放在任何您想要的位置,但请记住该位置,因为稍后您将需要它。

\n

在此输入图像描述

\n

你好世界

\n

让\xe2\x80\x99s运行一个测试项目来查看NDK安装是否有效。NDK 包文件夹包含示例,但它们似乎在 Android Studio 中开箱即用,无需额外配置。相反,我们\xe2\x80\x99 将导入在欢迎屏幕上运行的示例。也可以直接下载或克隆来自 GitHub 的这些NDK 示例。该示例集合与最新版本的Android Studio具有更好的兼容性。

\n

在此输入图像描述

\n

选择导入 Android 代码示例并在搜索框中键入 hello 以筛选列表。从 Ndk 类别下的过滤列表中选择 Hello JNI。单击“下一步”编辑应用程序名称和项目位置,然后单击“完成”。

\n

JNI

\n

代码加载且 Gradle 同步后,让\xe2\x80\x99s 看一下生成的项目结构。您可能已经注意到项目\xe2\x80\x99s 名称中似乎存在差异。为什么叫HelloJNI而不是HelloNDK?什么是 \xe2\x80\x98JNI\xe2\x80\x99 以及它与 \xe2\x80\x98NDK\xe2\x80\x99 有什么不同?\xe2\x80\x98Java Native Interface\xe2\x80\x99 是一个允许 Java 应用程序与本机代码交互的框架。JNI 和 NDK 协同工作,为 Android 应用程序提供本机支持。NDK 是 Android 框架的一部分,而 JNI 可用于任何 Java 应用程序,而不仅仅是 Android 应用程序。

\n

项目内部有一个名为 jni 的文件夹,其中包含应用程序的所有本机 C 或 C++ 源代码。JNI 提供双向接口。C/C++ 代码能够调用 Java 代码,包括标准 Android 库,Java 代码能够调用 C/C++ 代码中定义的本机函数。本机代码与 Java 代码受相同的沙箱和安全规则管理,因此应用程序不会完全不受限制地访问硬件。有关 JNI 的更详细讨论,请阅读Android 开发人员网站上的 JNI 文章。

\n

  • @SiddhantGhosh 您直接从[这里](http://qr.ae/TUIGFt) 撕下了这个答案,您至少可以给予信任或将答案更改为您自己的话。 (7认同)