当前位置: 首页 > 知识库问答 >
问题:

使用Android NDK在C或C中创建react本机模块?

钮刚洁
2023-03-14

我必须创建一个Java原生接口(JNI),以便从Android的反应原生模块访问C或C代码吗?

我的目标是在既支持Android又支持iOS的react本机模块中重用常见的C和C算法(非UI)。从目标C*调用C很简单。m模块,或目标C*中的C。mm模块。然而,Android的react本机模块用java实现本机模块代码。

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

Android NDK允许您用C或C编写Android代码。Android NDK与Qt 5.6等C框架配合得很好。我不明白如何在避免java JNI的同时跨越javascript以反应原生模块?

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

共有3个答案

任云瀚
2023-03-14

正如https://stackoverflow.com/a/36693929/1925631提到的,您可以使用Djinni,甚至还有一个用于反应原生https://github.com/sulewicz/djinni-react-native/tree/master/example-react-native/ExampleProject的分叉

柯河
2023-03-14

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

该项目为Objective-C和Java生成接口绑定。一旦您为C创建了包装代码,您就可以创建与React Native集成的Java和Objective-C类。因此React将调用Obj-C/Java,它将调用C。利润。

这将是很酷,看看如何为你工作,我还没有看到任何人这样做。

锺离声
2023-03-14

我最近不得不在一个React Native项目上这样做,如果不使用JNI,我就找不到解决办法。为此,您基本上必须为JSJava桥编写代码,然后为Java(通过JNI)桥编写更多代码,然后返回JS。

如果您只传递原语,那么JNI可以很容易地处理类型转换,例如Java int到C中的jint(这是一个int typedef),但是如果您要传递复杂的数据类型,那么您必须编写代码,通过告诉JNI您的类有哪些字段以及这些字段是什么类型来获得JNI jobject的C结构。我发现编写实用函数更容易做到这一点。这需要很多初始设置和枯燥的代码,但一旦你开始使用并习惯了,就没有那么难了。JNI规范非常适合参考,它只是没有告诉您应该如何使用它。

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

 类似资料:
  • 我想把我的C#(托管)解密方法转换成Android NDK, C/C(NO JAVA) 我看到有加密。在JAVA方面,但我想远离任何JNI,我还看到有mcrypt和crypt,但找不到适用于android的编译库。 这里有一个C#的例子,我想把它翻译成C/C 更新到目前为止,我发现最好的方法是使用openSSL AES,我已经下载了一个预编译的Android库,我只是在努力让它与一些已经发布的示例

  • 当我运行命令< code>rake compile时,我很难弄清楚为什么我的rb_define_singleton和rb_define_method调用会中断。 首先,一个问题可能是我不确定最后一个整数参数实际上代表什么,以便决定使用什么值,我无法找到解释这一点的文档,但我觉得我只是猜测在那里,但问题似乎在第3个参数中,所以我担心的是 其次,我的构建失败,在调用时出现以下错误: 使编译../../

  • 本文向大家介绍C#使用XmlDocument或XDocument创建xml文件,包括了C#使用XmlDocument或XDocument创建xml文件的使用技巧和注意事项,需要的朋友参考一下 使用XmlDocument或XDocument创建xml文件,具体内容如下 需引用:System.Xml; System.Xml.Linq; 1.使用XmlDocument创建xml(入门案例) 使用XmlD

  • 问题内容: 您对创建单个实例应用程序有什么建议,以便一次只允许一个进程运行?文件锁,互斥锁还是什么? 问题答案: 一个好的方法是: 请注意,锁定使您可以忽略陈旧的pid文件(即,您不必删除它们)。当应用程序由于任何原因终止时,操作系统会为您释放文件锁。 Pid文件并不是非常有用,因为它们可能是过时的(该文件存在但该过程没有)。因此,可以锁定应用程序可执行文件本身,而不是创建和锁定pid文件。 一种

  • 问题内容: 我想构建一个 使用用户名作为参数 的 程序,并创建用户及其主文件夹 (具有一些诸如文件夹之类的硬编码规范,以及诸如用户名之类的安全检查不能是root或现有用户)。 我的应用程序需要创建用户才能授予SSH访问权限。 该程序将使用 sudo 执行。我读过它应该用C或C ++而不是脚本编写,因为脚本很容易被利用。 您能给我 一些建议或好的做法 吗? 我应该使用一些 Pam 库吗?有没有例子?

  • 我花了几个小时寻找如何使用服务号访问Gmail API的答案,发现我不能,除非我使用的是具有域范围授权的谷歌办公套件帐户,我来这里是想问你是否有办法使用上述API和私人帐户实际创建标签。我使用的是Visual Studio 2019和C#。在“developers.google.com”中有一个名为“尝试此API”的工具,我可以使用我的OAuth 2.0很好地创建标签,这里找到的. NET Qui