【问题标题】:Porting of Qt code on Android and how it works在 Android 上移植 Qt 代码及其工作原理
【发布时间】:2015-03-11 00:25:39
【问题描述】:

我正在考虑将我的 Qt 应用程序移植到 android 上。

我的问题是如何将用 C++ 和 Qt(也是 C++ 库)编写的代码移植到 android,因为 android 需要 java 代码,并且需要 apk 文件才能在设备上安装应用程序。我很好奇他们如何以及在代码上做了什么以使其像 java 代码一样工作。

如果问题不清楚,请发表评论,我会尽力使其更清楚。

【问题讨论】:

    标签: java android c++ qt porting


    【解决方案1】:

    Android 应用程序是 Java 应用程序,运行在名为“Dalvik”的虚拟机上。这给 Qt/C++ 应用程序在这种基于 Java 的平台上运行带来了许多挑战。为了克服这个问题,一个 Qt for Android 应用程序有两个部分。第一部分是由 qmake 组织的 Qt/C++ 原生应用程序。第二部分是启动器,它是 Qt Creator 根据您的应用程序偏好、设置和目标 Android 版本自动生成的 Java 代码。

    启动器是一个 Java 进程,因此 Qt Android 应用程序有一个基于 Java 的入口点。启动器中的 Java 代码将根据模板中其他文件中给出的元信息加载所需的 Qt 库。所以当一个 Qt for Android 应用程序启动时,它只是一个普通的 Java 应用程序。入口点将在QtActivity.java 中,可以在项目构建目录的android/src/… 下找到。

    加载 Qt 库后,Java 代码将在新线程上启动应用程序的本机 main() 函数,然后应用程序将启动。此时,Java 代码用于将事件从 Android 委托给 Qt。 Qt for Android 应用程序使用“Java Native Interface”(JNI)在 Java 世界和 C++ 世界之间进行通信。

    【讨论】:

    • 非常感谢您的见解。这真的很有帮助,但我不能投票,因为我是新手。还有一件事,当你说“第二部分是由 Qt 创建者生成 java 代码的启动器”时的部分。只是想知道它生成什么代码可以让 c++ 世界和 java 世界之间进行通信。例如-如果我用 c++ 编写 HelloWorld 程序,什么代码将使它可以被 java 调用。希望我问的是正确的问题,如果我错了,请纠正我。
    • @RahulAssassin 您可以构建一个简单的Qt Android 应用程序并查看$BUILD_TARGET/android/src/... 中生成的Java 文件QtActivity.java
    • 我制作了 qt 应用程序,并且可以在我的设备上成功运行它,但我无法更改应用程序映像。请帮助。
    • @RahulAssassin 你最好在一个新问题中问它。描述问题以及你做了什么。
    【解决方案2】:

    只要使用Qt5.4.0并安装NDK+android SDK你会发现在Android上使用c++非常简单。

    【讨论】:

    • 谢谢。我早些时候尝试使用 Qt 5.1,但没有运气。现在我已经删除了它并安装了 Qt 5.4 。会告诉你它是否有效,但无论如何谢谢。
    • 终于可以在我的安卓设备上运行QT应用了..:)
    猜你喜欢
    • 2013-04-22
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2014-10-27
    • 2012-01-27
    • 2012-03-23
    相关资源
    最近更新 更多