3.3.2 Bundle Qt libs in APK
在APK中捆绑Qt库,这种部署策略是最近才加进Qt Creator中的。除了你的应用库文件和资源文件,Qt Creator还自动添加你应用所需的所有Qt库。
在APK中捆绑Qt库的优点
-
你可以使用定制的Qt版本,加速产品上市,而不必为了修复你产品的重大Bug而等待官方版本的发布,而且你也不用在一个Qt新版本发布后等待官方版本发布再来部署你的应用。
-
Qt库不会在后台更新,不用担心你的应用突然出现问题。
-
Qt库可以使用应用商店供应商的基础服务(服务器、带宽、传输系统等),而Ministro使用Qt Project的基础服务,后者还没有测试过超大并发下载的性能,因此也不能肯定是否能支撑一个超级成功的应用。
-
如果使用Google Play(或其他应用市场),下载时会使用设备上的通用机制,就算你的应用挂起了,下载也会在后台进行,而进度会显示在状态栏上,而且它遵循用户的设置,不会在用户使用移动数据连接时下载和更新。
在APK中捆绑Qt库的缺点
-
与使用Ministro策略比较,你的APK会变得很大,因为Qt库很大。如果你要使用Qt的所有功能,Qt库文件就可能超过40MB。当然你的应用不一定需要所有的模块,如果你的应用只是使用Qt Quick Controls+Qt SVG+Qt Multimedia+Qt Sensors+Qt XML这些模块,Qt文件大概占到20MB,你的APK大小大概是10MB。
-
所有的Qt库都必须解压!因此你的应用将需要更多的空间来运行(超过50MB)。应用安装后,为了访问它的assets,Android会把它保留在系统中,APK不会被删除,因此别忘了计算它的大小。在第一次运行时,我们的应用会解压Qt库和插件到应用的主文件夹下,为了看看你的应用到底占用了多大空间,你可以在“设置->应用(或应用程序)”中找到你的应用,查看“存储”选项的“总计”一栏。我检查了HelloQtOnAndroid示例(它使用Qt Core+Qt Widgets+Qt Gui+Qt XML等模块),它占用接近20MB空间。
-
因为体积太大,你不能在一个APK中匹配多个目标平台,你必须给每个平台(armv5、armv7、x86)创建一个APK,这会给版本维护工作带来很多麻烦。
-
不能在armv5设备上使用VFP,不能在armv7设备上使用NEON。
正如你所看到的,没有完美的解决方案。Ministro方案的优点刚好是Bundle Qt libs in APK方案的缺点,而Ministro方案的缺点又刚好是Bundle Qt libs in APK方案的优点。
SelbtRy1CKbvaOMZfIq2vF4HLf+lMWNpw8Lr4pfKxT3Tux65tPF3p1H8tjeUYf8I