【发布时间】:2015-12-07 19:18:10
【问题描述】:
我有一个 android 应用程序,我在其中使用 JNI(Java 本地接口)运行本地 C++ 代码。我想将它移植到代号一,以便它也可以在 iOS 上运行。代号一的 JNI 的替代方法是什么,可以让我运行我的本机 C++ 代码?
【问题讨论】:
标签: codenameone
我有一个 android 应用程序,我在其中使用 JNI(Java 本地接口)运行本地 C++ 代码。我想将它移植到代号一,以便它也可以在 iOS 上运行。代号一的 JNI 的替代方法是什么,可以让我运行我的本机 C++ 代码?
【问题讨论】:
标签: codenameone
您可以从 Objective-C 调用 C++,我们在 iOS 端口的 ZXing 演示中就是这样做的,请参阅:http://github.com/codenameone/codenameone-demos
对于 Android,您需要使用 NDK 包装 C++ 代码才能使用它。 Chen 不久前在一篇博文中讨论过这个问题:http://www.codenameone.com/blog/integrating-android-3rd-party-libraries-jni.html
相关部分是这样的:
我们最近添加了第三个选项 :aar 文件。 aar 文件是来自 Google 的二进制格式,代表 Android 库项目。 Android 库项目的问题之一是 它需要项目来源,这使第 3 方很难 厂商发布库,所以android引入了aar文件 是表示库项目的二进制格式。
要了解有关 arr 的更多信息,您可以阅读this。
您可以通过将 aar 文件放在 native/android 和 构建服务器会将其链接到项目。
请注意,对于 Android,您可能希望使用新的 gradle 构建系统,这也会使这更简单:http://www.codenameone.com/blog/material-icons-background-music-geofencing-gradle.html
【讨论】:
Codenameone 具有允许添加本地代码的本地界面。
每个平台都有自己的本地代码,据我所知,C++ 不在其中。
我建议您手动将您的代码从 C++ 转换为 Java 和 Objective-C,然后您可以使用这些代码来实现 CN1 本机接口。
阅读本机接口here 并查看native demo
【讨论】: