Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android原生项目中集成Qt库_Android_Qt_Qt5_Shared Libraries - Fatal编程技术网

如何在Android原生项目中集成Qt库

如何在Android原生项目中集成Qt库,android,qt,qt5,shared-libraries,Android,Qt,Qt5,Shared Libraries,我是一名本地Android开发人员,一位客户要求我在本地Android应用程序中重新使用他的Qt库项目。我对Qt开发非常陌生,我的意思是,我了解C/C++但从未处理过Qt开发本身,无论是环境还是部署方法 我一直在研究这些解决方案,但我没有更接近于创建一个Android项目,其中有一个Qt库,我可以与之交互 类似的解决方案: 我的问题:如何将Qt项目导出为Android项目的可用格式?如果您能提供详细的指导,我们将不胜感激 谢谢 假设您的Qt应用程序仅用于其逻辑(而不是GUI端),您需要它

我是一名本地Android开发人员,一位客户要求我在本地Android应用程序中重新使用他的Qt库项目。我对Qt开发非常陌生,我的意思是,我了解C/C++但从未处理过Qt开发本身,无论是环境还是部署方法

我一直在研究这些解决方案,但我没有更接近于创建一个Android项目,其中有一个Qt库,我可以与之交互

类似的解决方案:

我的问题:如何将Qt项目导出为Android项目的可用格式?如果您能提供详细的指导,我们将不胜感激


谢谢

假设您的Qt应用程序仅用于其逻辑(而不是GUI端),您需要它做什么:

将JNI添加到Android的Qt库 JNI(Java本机接口)允许创建一个接口来链接和使用来自Java的本机(C++)代码。它用于包装C++代码,并提供从Android应用程序

直接可见和可用的函数。
  • 使用Qt的在线安装程序为Android安装所需的Qt版本(选择所需的Qt版本时会出现一个复选框)
  • 创建一个JNI接口,以允许应用程序和库进行对话。该示例中包含了这一点:。我可能会建议创建另一个C++/JNI库作为C++/Qt库的包装器。这样,您就不会用JNI依赖项污染原始库
在应用程序中集成JNI库 一旦有了JNI接口,就必须交叉编译该库并将其与Android应用程序一起发布

  • 从androidstudio构建您的本机库(在指向您的Qt库并包含dir之后)。或者,您可以从Qt-Creator手动构建它(稍微容易一点),并只导入结果
    。so
    。但是,如果您的Qt库发生变化,这将是痛苦的
  • 打包库(
    .so
    ),并在应用程序启动时加载它。这也包含在样本中。加载库后,在进行一些转换工作后,您将能够使用公开的JNI函数并传递参数。您的Android应用程序还可以向本机库传递一个句柄,允许以两种方式进行通信
笔记
  • 请注意项目的许可。针对Android的交叉编译Qt可能会转向其GPLv3或商业许可证,而不是没有Android的LGPLv3
  • Qt库必须包含在最终包装中。因此,它们要么与原始库进行静态链接,要么动态链接并存储在APK中
  • 您可以利用Qt JNI类简化接口的创建,但这不是必需的:
  • 线程可能会变得困难,因为对JNI的调用/来自JNI的调用必须从主线程运行

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

假设您的Qt应用程序仅用于其逻辑(而不是GUI端),您需要它做什么:

将JNI添加到Android的Qt库 JNI(Java本机接口)允许创建一个接口来链接和使用来自Java的本机(C++)代码。它用于包装C++代码,并提供从Android应用程序

直接可见和可用的函数。
  • 使用Qt的在线安装程序为Android安装所需的Qt版本(选择所需的Qt版本时会出现一个复选框)
  • 创建一个JNI接口,以允许应用程序和库进行对话。该示例中包含了这一点:。我可能会建议创建另一个C++/JNI库作为C++/Qt库的包装器。这样,您就不会用JNI依赖项污染原始库
在应用程序中集成JNI库 一旦有了JNI接口,就必须交叉编译该库并将其与Android应用程序一起发布

  • 从androidstudio构建您的本机库(在指向您的Qt库并包含dir之后)。或者,您可以从Qt-Creator手动构建它(稍微容易一点),并只导入结果
    。so
    。但是,如果您的Qt库发生变化,这将是痛苦的
  • 打包库(
    .so
    ),并在应用程序启动时加载它。这也包含在样本中。加载库后,在进行一些转换工作后,您将能够使用公开的JNI函数并传递参数。您的Android应用程序还可以向本机库传递一个句柄,允许以两种方式进行通信
笔记
  • 请注意项目的许可。针对Android的交叉编译Qt可能会转向其GPLv3或商业许可证,而不是没有Android的LGPLv3
  • Qt库必须包含在最终包装中。因此,它们要么与原始库进行静态链接,要么动态链接并存储在APK中
  • 您可以利用Qt JNI类简化接口的创建,但这不是必需的:
  • 线程可能会变得困难,因为对JNI的调用/来自JNI的调用必须从主线程运行

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

什么样的库是Qt库?请注意,Qt是为运行自己的事件循环而设计的,任何有趣的事情都需要创建一个Qt库,例如,只运行一个计时器并每秒与您的应用程序通信一次,以及现有的
QCoreApplication
实例。Qt c的行数不多