跨平台应用app开发实践方案 Qt5 for Android iOS
自Qt 5.2 发布后(目前最新版本:Qt6.0),开始支持 Android 、iOS移动平台上的应用程序开发 ,Qt for Android 上的应用程序开发成为除较常规的 Eclipse (Android Studio) + android SDK之外的另一个可探究的解决方案;Qt for iOS上的应用程序开发成为除较常规的 XCode + Objective-C(Swift)之外的另一个可探究的解决方案。
一、Qt跨平台特性
1、Qt是一个跨平台的C++图形用户界面应用程序框架,利用Qt开发的程序可以实现一次编写代码,多次编译到不同平台上,如Windows、Linux、MAC、Android、iOS、Windows Phone等。
2、Qt开发的程序,可实现在多操作系统以及移动设备之间获得一致的跨平台用户体验 。
建议:当要开发的程序需要支持Windows、Mac OS X、Linux、Android、iOS等平台,无论是从人力、成本还是工期方面考虑,Qt是值得考虑的技术方案之一。
二、跨平台实现的基本框架
Qt的跨平台特性的核心部件是QPA插件。
1、QPA介于 Qt 与不同平台之间,它针对各个平台编写平台相关的QPA插件,直接 与各个平台融合在一起,简化了移植工作。
2、对开发者来讲,一次编写,多次编译,到处运行。
3、QPA是Qt程序main函数调用的入口,通过JNI方式调用;
三、Qt for Android项目介绍
1、Qt for Android应用程序组成部分
1-1、 原生部分
Qt程序C/C++/代码,被编译成.so文件 包含一个或多个动态库文件( .so ),以及所有需要的依赖相关的库文件。
1-2 、 Android相关的部分
(1)Android manifest文件 应用程序的入口
Android 使用这个文件决定启动哪个应用或活动,它描述了应用需要的权限、 Android API 版本等信息
(2)Qt on Android应用的入口文件(QtActivity.java和QtApplication.java)
用来加载应用程序所需的依赖库、是 Qt QPA实现的 和 Android 世界之间的通信桥梁的一部分。
(3)资源文件
Android布局文件、字符串资源、图片资源等
2、Qt for Android项目工程相关介绍
下面以技术调研、尝试性项目工程相关要点为例,说明Qt for Android开发的app的框架结构:
2-1、 Qt部分
用于软件界面的开发,可以使用传统的Qt Widgets ,对于移动端开发来说,建议使用 QML,协同 JavaScript,其全面支持触摸操作、流畅的动画效果,简单快捷、渲染效果更佳、界面更炫酷 。
2-2、Android部分
基于Qt for Android开放需要相关的Android SDK、Android NDK等开发环境
2-3、JNI交互部分
(1)Qt 要实现 Android 的所有功能是不现实的。要想使用 Android 系统已经具备的功能,就需要通过 JNI 来访问它们。 JNI 是在 Java 和 C++ 之间相互调用的唯一途径。
(2)通过JNI方式调用 Android 系统功能来扩展应用如:拍照、屏幕常亮、定位、连接网络、屏幕旋转等功能。
3、使用Qt Creator开发Android程序要点
3-1、Android Manifest
作用:设置程序图标、包名、版本号、使用API、权限等
3-2、指令集 armeabi-v7a,armeabi,和x86说明
由于Android设备种类众多,在编译应用程序时,需要指定使用哪种指令集来进行编译;
(1)armeabi-v7a:
目前主流的Android设备 是基于armeabi-v7a架构的,该指令的CPU支持硬件浮点运算,并可以兼容armeabi指令集和x86的设备
(2)armeabi:
支持所有 ARM 设备,不支持硬件浮点运算,是针对普通的或旧的arm cpu。
(3)x86:
支持基于硬件的浮点运算的 IA-32 指令集,一般可支持Android和Windows双系统。
四、Qt for iOS项目简介
1、使用Qt开发iOS程序(不扩展本地应用方式)
如果使用Qt for iOS开发的程序,不依赖于iOS系统自身的功能,比如打开摄像头、扫描二维码、拍照等,则与传统的桌面Qt程序开发相同,很简单,只需要选择不同的套件即可自动编译并部署运行到iPad,iPhone等设备上。
2、QT+Objective-C混编(扩展本地应用方式)
针对上述方式1的不足,可以采用:QT+Objective-C混编(扩展本地应用方式)
使用Qt开发的程序,首先转换成Xcode工程,使用XCode开发工具以C++与Objective-C混编方式进行开发
由于QT对于iOS本地应用的调用实现的不是很好,所以使用Objective-C混编方式则可以很方便的扩展本地应用:比如打开摄像头、扫描二维码、拍照等。
以上,是本人通过技术尝试实践,所总结的项目开发要点,供大家参考,由于水平有限,如有错误或不妥,请见谅并欢迎批评指正!
另外:如下是通过技术探索尝试,完成开发的基于Qt for Android的App部分界面截图: