android - 使用 Android NDK 在 C 或 C++ 中创建 react-native Native 模块?

标签 android android-ndk react-native

我必须创建一个 Java native 接口(interface) (JNI) 才能从用于 Android 的 react-native native 模块访问 C 或 C++ 代码吗?

我的目标是在支持两者的 react-native Native Module 中重用常见的 C 和 C++ 算法(非 UI) 安卓和 iOS。从 Objective C *.m 模块调用 C 或从 Objective C++ *.mm 模块调用 C++ 很简单。但是,Android 的 react native Native Module 在 java 中实现了 Native Module 代码。

https://facebook.github.io/react-native/docs/native-modules-android.html#content

Android NDK 允许您使用 C 或 C++ 编写 Android 代码。 Android NDK 适用于 C++ frameworks such as Qt 5.6 .我不明白如何在避免 java JNI 的同时跨 javascript 到 react-native Native Module?

提前感谢任何提示或指导,

最佳答案

我最近不得不在一个 React Native 项目上执行此操作,但我无法在不使用 JNI 的情况下找到解决方法。为此,您基本上必须为 JS 到 Java 桥编写代码,然后为 Java 到 C(通过 JNI)桥编写更多代码,然后返回到 JS。

如果您只传递原语那么这很容易,因为 JNI 可以处理类型转换,例如在 C 中将 Java int 转换为 jint(这是一个 int typedef),但是如果您要传递复杂的数据类型那么您必须通过告诉 JNI 您的类具有哪些字段以及这些字段的类型来编写代码以从 JNI jobject 中获取 C 结构。我发现编写实用程序函数来执行此操作更容易。这是很多初始设置和无聊的代码,但是一旦您开始使用并习惯了它,它就不那么困难了。 JNI 规范非常适合引用,只是没有告诉您如何您应该使用它。

我有一个 github project它使用 JNI 传递一些示例类。这blog article解释了 JNI 的所有设置步骤,如果您已经对此感到满意,它会在“真实世界 JNI”部分中详细介绍。如果您对此有任何疑问,请告诉我!

关于android - 使用 Android NDK 在 C 或 C++ 中创建 react-native Native 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574454/

相关文章:

android - 更新到 Gradle 5.6.4 和 Android Studio 3.6.1 后 nativeLibraryDir 显示为空

javascript - 我如何在 Firebase 上随机获取相同的数据?

java - 获取应用程序图标时,MainActivity 类型未定义 getContext() 方法

java - picasso 不从文件加载图像

Android - ViewPager2 在调用 Diffutil.dispatchUpdatesTo 时将适配器位置重置为 0

android - Eclipse LogCat不可读-OpenCV/Android NDK

android - 在 Android 中从 SDK 28 迁移到 SDK 29 后,我的应用程序崩溃并面临 : signal 11 (SIGSEGV), 代码 2 (SEGV_ACCERR),Android studio 3.4.1 中的错误

android - 如何在我的 Android 应用中实现 YouTube 离线保存视频等功能

react-native - 为什么 AsyncStorage getItem 返回 null?

react-native - React native 实时热重载不适用于 Windows