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

7
你可能知道,在Android上有三种部署Qt应用程序的方法:
  1. 使用Ministro服务安装Qt
  2. 将本地Qt库部署到临时目录中
  3. 在APK中捆绑Qt库
第一种方法大约需要30秒,还需要安装一个额外的apk Ministro 。 对我来说,第二种方法需要大约1分钟!每次尝试运行程序时,Qt Creator都会将Qt库推送到设备上。 第三种方法使.apk文件变得非常大,并且对我来说也需要大约1分钟。
我认为在这种情况下,使用Qt开发Android应用程序是不合理的。是否有一种方法可以使部署过程更快?

1
“使用Qt开发Android应用程序并不合理”,这仅仅是技术的预览,而不是最终产品。 - ariwez
虽然这已经是一个技术预览版本,但已经相当不错了。请注意,最好的情况下构建时间将在10-15秒左右(使用普通PC和更好的Qt构建)。另外,为什么您认为这不合理(只是出于好奇)?其他程序是否使用NDK更快地完成此操作? - Floris Velleman
@FlorisVelleman 我觉得它不够好看,尝试部署简单的“hello world”程序时总是崩溃;但我会再试一次。 - ariwez
1
@ariwez 花一天时间进行设置似乎是每个人的问题。但是一旦你配置好了,我得到的构建时间与 mosync 等相当。 - Floris Velleman
我希望我们只有像你所遇到的那样的问题;看一下这个链接:https://stackoverflow.com/questions/62358144/qt-creator-android-unbearable-instability-of-deployment-debugging-process 这不是一个单一的设置。它需要很长时间,然后失败了。感觉就像操作70年代的“超级计算机”..或者让部署应用程序到Android感觉像是发送探测器到火星。 - Vega4
@Vega4 我已经停止使用Qt for Android了,因为它存在一些缺陷。 - s4eed
2个回答

2

距离OP发帖已经快一年了,但问题并没有得到解决。一个7 MB的APK部署需要超过1分钟半的时间,而该项目的编译只需5秒钟。我回答的原因不是问题得到了解决,而是提供了另一种替代方案。

我实现了一个“变通方法”,由两个应用程序配合使用 - 一个在PC上,一个在设备上 - 我创建它主要是为了远程编译文件,但结果证明它也是一个更快速的部署替代方案。在主机上创建一个应用程序,在单独的进程中启动编译,完成后通过网络将产品文件复制到设备上进行部署。除了远程编译之外,这还将部署时间减少到了大约10秒钟,我可以接受这个时间。


1
4.5年过去了,对我来说它仍然非常缓慢。这是否意味着我应该在QT Creator上编译,然后复制apk?必须说编译也非常缓慢。 - Lior
1
编译一个空的项目对我来说大约需要20秒钟,不仅是编译APK,也许你的电脑比较慢?请记住第一次尝试时,它会下载一堆东西,但之后速度会更快,因为它不再需要下载工具。AMR模拟器仍然很慢、有bug和崩溃问题,但是4.5年后现在也有x86模拟器映像,运行得非常好。 - dtech
谢谢!这台电脑是i5,通常表现不错... 耗时的进程是C:\Qt\Qt5.11.2\5.11.2\android_armv7\bin\androiddeployqt.exe。我该如何获取和使用x86模拟器映像?那可能非常有用。 - Lior
1
通过Android SDK管理器安装Android API的映像,并设置一个在Creator中使用它的模拟器。请记住,您必须为Android x86构建应用程序,以便模拟器能够运行它。 - dtech
1
似乎之前没有人向Qt报告过这个问题,所以我已经报告了。请随意为该问题投票支持:https://bugreports.qt.io/browse/QTBUG-74830 - Frederik

0

(目前还不是完整和经过充分测试的答案,但如果我发现更多信息,我会更新...)

选项1:将更改的库复制到已 root 的设备中

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

根据 此博客文章 中的步骤,并根据我在设备上找到的路径进行更新:

  1. 在您的构建主机系统上运行交叉编译步骤。只需使用make或Qt Creator中的等效命令。

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

    adb push build/path/libAppName.so /data/app/com.example.appname/lib/arm
    
  3. 在Android设备上重新启动应用程序。

如果这个方法可行,你甚至可以将它集成为Qt Creator中的自定义部署步骤。
由于缺少rooted设备,我尚未测试过这种技术。但是它应该仍然有效,因为(1)rooted的Android设备仍然允许覆盖所有文件,(2)APK的调试版本仍然可以安装而不需要代码签名,因此在没有代码签名的情况下覆盖APK中的库应该是可能的。
第二个选项:通过桌面目标进行解决
我偶然发现,Qt的多平台特性可以80%的时间用于避免Android部署缓慢的问题。你只需设置另一个编译目标; 在Qt Creator中,您可以在“项目→构建和运行”下添加一个目标,使用“设备类型:桌面”来选择一个套件。
现在,当您想要测试任何非Android特定内容时,请在桌面版本中测试。构建和启动这个版本只需要几秒钟时间。

这种方法进一步得到支持,使用收敛应用程序开发框架,从而使相同的用户界面可在桌面和移动版本中使用。 KDE KirigamiMauiKit 是两个为此目的构建在 Qt 上的库。入门文档有点稀少,但对于 Kirigami,我编写了一个详尽的自述文件以设置示例应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接