首页 > 解决方案 > Using C/C++ Library on Android

问题描述

I have coded a library that provides some function add, sub, divide, multi by c/c++ programming language. It's built to library.so by using Android NDK. So now, I want to call these function of library by using Android. I want to as How I can do ?

Thank.

标签: androidandroid-ndkjava-native-interface

解决方案


NDK 包

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

在此处输入图像描述

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

在此处输入图像描述

你好世界

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

在此处输入图像描述

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

JNI

在代码加载完毕并且 Gradle 同步之后,我们来看看生成的项目结构。您可能已经注意到项目名称中的差异。为什么叫 HelloJNI 而不是 HelloNDK?什么是“JNI”,它与“NDK”有何不同?“Java Native Interface”是一个框架,它使 Java 应用程序能够与本机代码进行交互。JNI 和 NDK 协同工作,为 Android 应用程序提供原生支持。NDK 是 Android 框架的一部分,而 JNI 可用于任何 Java 应用程序,而不仅仅是 Android 应用程序。

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


推荐阅读