在 Android 上部署 Qt 应用程序真的很慢吗?

Posted

技术标签:

【中文标题】在 Android 上部署 Qt 应用程序真的很慢吗?【英文标题】:Deploying Qt Application on Android is really slow? 【发布时间】:2013-07-23 07:19:51 【问题描述】:

您可能知道在 android 上部署 Qt 应用程序的三种方法:

    使用 Ministro 服务安装 Qt 将本地 Qt 库部署到临时目录 在 APK 中捆绑 Qt 库

第一种方法大约需要 30 秒,并且还需要安装一个额外的 apk 。 部长。 第二个对我来说大约需要1分钟!并且每当我尝试运行程序 Qt creator 将 Qt 库推送到设备时。 第三个使 .apk 文件变得非常大,对我来说又需要大约 1 分钟。 我认为在这种情况下使用 Qt 开发 Android 应用程序是不合理的。有没有办法让部署过程更快?

【问题讨论】:

“使用Qt开发Android应用是不合理的” 仍然只是技术的预览,不是最终产品。 这对于技术预览来说已经相当不错了。请务必意识到,最好的构建时间约为 10-15 秒(使用平均 pc 和更好的 qt 构建)。另外,为什么您认为其他程序使用 NDK 更快地执行此操作是不合理的(在这里只是好奇)? @FlorisVelleman 我认为它不够漂亮,尝试部署简单的“hello world”,但每次都崩溃;)但我会再试一次。 @ariwez 花一天时间来设置它似乎是每个人的问题。当你配置好它时,我得到的构建时间可以与 mosync 等相媲美。 我希望我们只有像你这样的麻烦;看看:***.com/questions/62358144/… 这不是一个单一的设置。它需要很长时间,然后失败。感觉就像操作 70 年代的“超级计算机”……或者感觉将应用程序部署到 Android 就像向火星发送探测器一样。 【参考方案1】:

自 OP 以来几乎整整一年,事情根本没有改变。对于一个在 5 秒内编译的项目,部署一个 7 MB 的 APK 需要一分半钟。我回答的原因不是问题得到解决,而是提供替代解决方案。

我已经实现了一个“解决方法”,其中包含两个协同工作的应用程序 - 一个在 PC 上,一个在设备上 - 我创建这个主要是为了远程编译文件,但事实证明它是一个更快的替代方案部署也是如此。在主机上创建一个应用程序,该应用程序在单独的进程中启动编译,完成后通过网络将产品文件复制到要部署的设备。除了远程编译,这将部署时间减少到 10 秒左右,我可以忍受。

【讨论】:

4.5 年后:),对我来说仍然很慢。那是说我应该在QT Creator上编译,然后复制apk吗?不得不说编译也超级慢 对我来说编译一个空的大约是 20 秒,与其说编译不如编译 APK,也许你的电脑很慢?请记住,第一次尝试时,它会下载一堆东西,但之后它会更快,因为它不再需要下载工具。 AMR 模拟器仍然是缓慢的错误和崩溃,但 4.5 年后现在也有 x86 模拟器图像,运行良好。 谢谢! pc是i5,通常很好......需要很长时间的过程是C:\ Qt \ Qt5.11.2 \ 5.11.2 \ android_armv7 \ bin \ androiddeployqt.exe。如何获取和使用 x86 仿真器图像?这可能非常有用 通过 android sdk manager 为你的 android API 安装一个镜像,并设置一个在 creator 中使用它的模拟器。请记住,您必须为 android x86 构建您的应用程序才能使模拟器能够运行它。 我之前好像没有人向 Qt 报告过这个问题,所以我有。请随时为这个问题投票:bugreports.qt.io/browse/QTBUG-74830【参考方案2】:

(还不是一个完整且经过全面测试的答案,但如果我发现更多信息,我会更新……)

选项 1:将更改的库复制到有根设备

一个新的构建通常只会导致一个更改的文件:您的libAppName.so,包含您的应用程序代码的本机库。至少在 2015 年,可以简单地将这个库复制到 Android 设备上,而无需重新构建 APK 包。这仅适用于 root 的 Android 设备(请注意,所有模拟器都默认为 root)。

一步一步,according to this blog article 并使用我在设备上找到的路径进行更新:

    在您的构建主机系统上运行交叉编译步骤。所以只需 make 或 Qt Creator 中的等价物。

    将生成的libAppName.so 复制到已root 的Android 设备:

    adb push build/path/libAppName.so /data/app/com.example.appname/lib/arm
    

    在 Android 设备上重新启动应用程序。

如果可行,您甚至可以将其作为自定义部署步骤集成到 Qt Creator 中。

由于缺少根设备,我尚未测试此技术。但它应该仍然可以工作,因为 (1) 根植的 Android 设备仍然允许覆盖所有文件,并且 (2) APK 的调试版本仍然可以在没有代码签名的情况下安装,因此应该可以在没有代码签名的情况下覆盖 APK 中的库。

选项 2:作为解决方法的桌面目标

我偶然发现使用 Qt 的多平台特性可以在 80% 的情况下避免缓慢的 Android 部署。您只需设置另一个编译目标;在 Qt Creator 下,您将在“Projects → Build & Run”下添加一个目标,使用“Device Type: Desktop”工具包。

现在,当您想要测试任何非 Android 特定的东西时,请改为在桌面版本中进行测试。构建和启动只需几秒钟。

使用用于融合应用程序开发的框架进一步支持此方法,以便在桌面和移动版本中都可以使用相同的用户界面。 KDE Kirigami 和 MauiKit 是基于 Qt 构建的两个库。入门文档有点稀缺,但对于 Kirigami,我写了 an extensive README 用于设置示例应用程序。

【讨论】:

以上是关于在 Android 上部署 Qt 应用程序真的很慢吗?的主要内容,如果未能解决你的问题,请参考以下文章

在真正的 Android 设备上调试 Spring RestTemplate 真的很慢

Ionic ios 应用程序在 android 上真的很慢但很快

Qt creator 调试模式真的很慢

在 Android 应用程序上部署 Qt 时出错

QVideoWidget 和 QMediaPlayer (QT 5.2.1) 无法在 Android 上显示视频

如何在 Android 上部署 Qt imageformats 插件