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

从AndroidJava调用本机函数-替代JNI

牛凌
2023-03-14

这可能是一个真正的新手问题,但我正在编写一个Android应用程序,它需要使用一个用C编写的.so库。该.so由几个类组成,是通用C语言,而不是JNI语言。

除了JNI之外,有没有办法从AndroidJava应用程序调用C函数?我所看到的关于JNI的一切都表明,您必须重写本机代码以特定于JNI,如果只给您一个. so,那真是太不方便了。

在Android 4.0.3中,从java应用程序调用本机函数有哪些替代方法?编写一个小的JNI C程序来调用C函数,然后可以从Java中调用,这有多简单?

Eclipse中有什么东西可以简化这个过程吗?

我可能不应该对没有更优雅的解决方案感到惊讶。

共有2个答案

祁雪峰
2023-03-14

这不是Android特有的,但是您应该看看Java本机访问(JNA)。它允许您使用libffi(不使用JNI)访问本机代码

焦兴为
2023-03-14

我认为没有比您建议的为库编写JNI包装器更优雅的解决方案了。无论如何,这可能不是一个好主意,因为您应该为您想要支持的每个架构编译所有本机代码的单独版本。仅仅附加到已编译的库意味着您被它的架构束缚住了。

 类似资料:
  • 问题内容: 在iOS8中使用WKWebView,如何从本机端运行JavaScript函数或以其他方式从本机端与JavaScript通信?似乎没有类似于UIWebView的方法。 (我可以在该对象上使用,以允许从JS到本机进行通信,但是我正在寻找相反的方向。) 问题答案: (我在这里提出问题后不久就为此提出了雷达申请。) 几天前刚刚添加了一种新方法(感谢jcesarmobile指出): 添加 该方法

  • 知识点 理解 Promise 概念,为什么需要 promise 学习 q 的 API,利用 q 来替代回调函数(https://github.com/kriskowal/q ) 课程内容 第五课(https://github.com/alsotang/node-lessons/tree/master/lesson5 )讲述了如何使用 async 来控制并发。async 的本质是一个流程控制。其实在

  • 问题内容: 我正在使用c ++为node.js编写附加组件。 这里有一些片段: 我需要将一个JavaScript函数另存为回调,以便稍后调用。Client类是另一个对象的观察者,应从onAsyncMethodEnds调用javascript回调。不幸的是,当我调用函数“ BeInitiator”时,在回调Call()之前收到“ Bus error:10”错误 感谢建议 问题答案: 您不能从另一个线

  • 我想从本机模块调用react本机函数。 我已经为我的react原生应用程序创建了一个条形码扫描仪插件,条形码扫描仪SDK在原生IOS中可用 现在我的问题是,一旦条形码扫描仪扫描数据并发送到本机IOS,我如何在我的反应本机应用程序中获取这些扫描数据?(我在IOS本机中获得了扫描数据) 我想在本机模块扫描数据并将这些数据发送到react-本机时调用react-本机应用程序函数 请给出例子或适当的文件,

  • 问题内容: 我有一个C函数,我想从C 调用。我无法使用“ ”这样的方法,因为C函数无法使用g 进行编译。但是使用gcc可以很好地编译。有什么想法如何从C ++调用函数吗? 问题答案: 像这样编译C代码: 然后是这样的C ++代码: 然后使用C ++链接器将它们链接在一起: 当您包含C函数的声明时,还必须告诉C ++编译器C头即将到来。因此开始于: 应该包含以下内容: (在此示例中,我使用了gcc,

  • 问题内容: 我想从JavaScript代码中调用Python函数,因为JavaScript中没有其他方法可以做我想做的事情。这可能吗?您可以调整以下代码段使其正常工作吗? JavaScript代码: 包含使用高级库编写的函数,这些函数在JavaScript中没有易写的等效项: 问题答案: 您需要做的就是向您的pythoncode发出ajax请求。您可以使用jquery 进行此操作,也可以仅使用ja