如何在Android Native项目中集成QT库



我是本地Android开发人员,客户要求我在本机Android应用程序中重新使用他的QT库项目。我真的是QT开发的新手,我的意思是,我了解C/C ,但从未处理过QT开发本身,也不是环境或部署方法。

我一直在研究这些解决方案,但是我没有能够使用QT库来创建一个可以与之互动的QT库来创建Android项目。

类似的解决方案:

  • http://thebugfreeblog.blogspot.com/2012/05/embedded-cross-platform-development-for.html
  • https://developer.android.com/studio/projects/add-native-code#create-sources

我的问题:如何将QT项目导出到我的Android项目的可用格式?任何逐步指南都将不胜感激。

谢谢!

假设您的QT应用程序仅用于其逻辑(不是GUI端),您需要它的内容:

将JNI添加到您的QT库中的Android

jni(Java本机接口)允许创建一个接口,以链接和使用Java中的本机(C )代码。这用于包装您的C 代码,并直接从Android应用程序中可见且可用的功能

  • 使用QT的在线安装程序安装想要Android的QT版本(选择想要的QT版本时的复选框)
  • 创建一个JNI接口,以允许您的应用程序和库对话。该样本涵盖了这一点:https://developer.android.com/ndk/samples/sample_hellojni。我可能会建议创建另一个C /JNI库,该库充当您的C /QT库的包装器。这样,您就不会用JNI依赖项污染原始库。

将您的JNI库集成到您的应用程序

一旦您拥有JNI接口,就必须与Android应用程序交叉编译并将该库交付

  • 从Android Studio构建本机库(指向您的QT库并包括DIR)。另外,您可以从QT创建者(稍微容易)手动构建它,并仅导入所得的.so。但是,如果您的QT库更改
  • ,那将是痛苦的
  • 包装库(.so),并在应用程序启动时加载它。样本也涵盖了这一点。加载库后,您将能够在进行一些转换工作后使用您暴露的JNI函数并通过参数。您的Android应用程序还可以将手柄传递给本机库,以两种方式进行通信。

注释

  • 请小心您的项目许可。与没有Android的LGPLV3相比,Android的交叉编译QT可能会切换到其GPLV3或商业许可证。
  • QT库必须包含在您的最后一个Pacakge中。因此,它们要么必须静态地链接到您的原始库,要么动态链接,然后存储在您的apk
  • 您可以利用QT JNI类使创建接口的创建更加容易,但这不是:https://doc.qt.io/qt-5/qandroidjniobject.html
  • 线程可能会变得困难,因为往返JNI的电话必须从主线程
  • 运行

我建议您从一个工作示例开始,如果您找到一个示例,因为整个设置肯定会花费一些时间。我不知道一个完整的教程涵盖了这一点,但是如果您找到一个,请随时分享!

最新更新