首页 文章

使用Android NDK在C或C中创建反应原生的本机模块?

提问于
浏览
8

我是否必须创建Java本机接口(JNI)才能从Android的本机原生模块访问C或C代码?

我的目标是在支持 both Android和iOS的react-native Native Module 中重用常见的C和C算法(非UI) . 从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转换为本机Native模块?

提前感谢任何提示或方向,

3 回答

  • 1

    我最近不得不在React Native项目中执行此操作,如果不使用JNI,我无法找到解决方法 . 为此,您必须为JS到Java桥构建代码,然后为Java到C(通过JNI)桥构建更多代码,然后再返回JS .

    如果你很容易,因为JNI可以处理类型转换,例如在C中使用Java int到jint(这是一个int typedef),但是如果你有很多初始设置和无聊的代码,但是一旦你开始并习惯它's not that difficult. The JNI Spec is great for reference, it just doesn'告诉你应该如何使用它 .

    我有一个github project使用JNI来传递一些示例类 . 这个blog article解释了JNI的所有设置步骤,如果您对此感到满意,它会在"Real World JNI"部分中进入脏的细节 . 如果您对此有任何疑问,请与我们联系!

  • 13

    如果你愿意做一些额外的工作,你可以使用Djinni .

    该项目为Objective-C和Java生成接口绑定 . 为C创建包装器代码后,可以创建与React Native集成的Java和Objective-C类 . 因此,React将调用将调用C的Obj-C / Java . 利润 .

    很高兴看到这对你有什么用,我还没见过有人这样做过 .

  • 2

相关问题