编程语言
首页 > 编程语言> > 从Java调用Objective-C代码最简单的方法是什么?

从Java调用Objective-C代码最简单的方法是什么?

作者:互联网

我需要从Java代码访问Mac OSX上的Wifi设备列表,并对其进行研究后,我发现我需要求助于“本地”代码-即CoreWLAN框架和CWInterface.h类(https://developer.apple.com/library/mac/#documentation/CoreWLAN/Reference/CWInterface_reference/translated_content/CWInterface.html)

我最初以为我可以使用JNA调用此代码,但意识到我需要一些东西,因为CoreWLAN是Objective-C(而不是C/C++).

我已经尝试过这个Objective-C Java桥接器(https://github.com/shannah/Java-Objective-C-Bridge),但是无法弄清楚如何使其找到CoreWLAN框架.

因此,我也尝试使用JNAerator(https://code.google.com/p/jnaerator/wiki/ObjectiveC),以便可以使用BridJ(https://code.google.com/p/bridj/),但无法使其生成正确的Java代码.

>仅使用这种样式java -Xmx1000m -jar jnaerator.jar -framework CoreWLAN -jar CoreWlan.jar可以快速运行,但会导致一个jar中仅包含CoreWlan.h的映射
>如果我对CWInterface.h运行jnaerator,则jnaerator失败.
(我正在使用jnaerator的最新快照版本)

从Java调用CWInterface.h上方法的最佳方法是什么?

解决方法:

我要做的是创建一个C类,该类通过JNI与Jav​​a代码进行通信.您可以在xCode项目中同时使用C和Obj-C.我还没有尝试过将JN使用Obj-C类,但我只是创建一个负责Java和Obj-C之间所有通信的C类,该类可以包含在您需要的Obj-C类中它(将此Obj-C文件的扩展名更改为.mm,因为它将包含C代码).

我发现这篇关于JNI的有用文章:http://www.ibm.com/developerworks/java/tutorials/j-jni/

标签:objective-c,jnaerator,java,macos,corewlan
来源: https://codeday.me/bug/20191123/2065073.html