这是系列文章中的一篇,阅读本文前请先阅读《Windows下Qt 5.2 for Android开发入门》,以便确保开发环境和作者一致。
部分文章被转发/转载却没有注明出处,特此声明:版权所有 foruok ,如需转载敬请注明出处(http://blog.csdn.net/foruok)。
我将从实践出发,带领大家一步一步完成在 Android 上的第一个 Qt 应用: Hello Qt on Android 。应用本身非常简单(仅仅是在屏幕上显示一个字符串 "Hello Qt on Android" ),这也是每种编程语言的入门教程中 Hello World 程序的共性。
下面我将和大家一起来探索使用 Qt Creator 3.0 创建、管理、编译、部署 Qt on Android 应用的整个过程。每一个步骤都配以我精心挑选并编排整理的截图,力求初学者可以按图索骥、顺畅地走下去,完成自己在 Android 平台上的第一次观光旅行。
创建工程
打开 Qt Creator ,点击文 "件(F)" 菜单,在弹出的菜单列表中选择 "新建文件或项目(N)" 。如下图所示:
如上操作后, Qt Creator 会弹出新建工程界面,让我们选择工程模板。如下面的所示:
这里我们选择 "应用程序" 项目, "Qt Widgets Application" 模板。可以看到最右侧的实时提示,支持的平台中有 Android(蓝线所示),看到这点,说明前面的开发环境搭建是正确的。
点击 "选择(C)..." 按钮,新建工程向导会指引我们进入下一环节 "项目介绍和位置" 。参考下图:
我已经做了标识,编号为 1 的文本框,你可以填写项目的名字,这里是 "HelloQtAndroid" ;编号为 2 的 "浏览..." 按钮允许你选择工程的存储路径,我准备把工程放在 "D:\projects\blogs\qt" 目录下面。请对照下图检查你的配置:
点击 "下一步" 按钮,跟随向导进入构建套件选择("Kit Selection")环节。
我选择了两个套件,"Android for armeabi (GCC 4.7, Qt 5.2.0)" 和 "Desktop Qt 5.2.0 MinGW 32bit",分别对应下图中的标号为 1 和 2 的区域。请对照下图检查你的配置。
点击 "下一步" 按钮,跟随向导进入 "类信息" 配置环节。下图是默认的界面:
上图中标号为 1 的下拉框,可以选择待创建的 Widget 的基类,默认是 QMainWindow ,我这里选择 QWidget。标号为 2 的复选框,如果选中则会生成一个 .ui 文件,可以通过 Qt SDK 中的界面设计师来编辑界面,为了简单直接,我们去掉了选中,不使用 .ui 文件,全部使用代码完成界面构建。
请参考下图检查你的配置:
点击 "下一步" 按钮,跟随向导进入 "项目管理" 环节。在这里你可以选择是否将工程加入版本控制系统(如 svn 之类),还可以看到即将添加到我们的 "Hello Qt on Android" 工程中的文件。如下图所示:
终于看到 "完成(F)" 按钮了,赶紧点击它!看下图,我们将进入日后使用 Qt Creator 这个近乎完美的 IDE 编程时使用频度最高、相依相伴时间最久的界面。
如上图所示,这就是我们日后天天要面对、不断打交道的界面。我会选择几个最常用的功能简明扼要的介绍它的用法。
左边栏,标号为 1 的标签,是 "编辑" 标签,选中它,会进入编辑模式,就是上面的样子。
标号为 2 的标签,是 "项目" 标签,选中它,会打开项目选项配置界面。该界面功能丰富到有些繁杂,后面我们会多花些时间来一一介绍我们的 "Hello Qt on Android" 工程必须要用的选项。
标号为 3 的是 "构建版本" 按钮, 点击它,会弹出一个快捷界面,允许我们快速选择不同构建版本(如 Android 的 Release 构建, Desktop 的 Debug 构建等等)。点击 "项目" 标签所进入的配置界面中也可以完成构建版本选择。
标号为 4 的是 "运行" 按钮,点击它, Qt Creator 会执行编译、链接、打包等等工作,直到目标程序运行起来或者出错停止。
"运行" 按钮下面依次是 "开始调试" 、 "构建项目" 按钮,鼠标悬停在它们上面就可以看到提示,其用途不言自明。
标号为 5 的那一横排标签,是 Qt Creator 的输出窗口,点击任一标签,都会向上伸展出一个窗口显示与标签名字对应的信息。
问题标签对应的窗口显示构建问题,找到问题后双击就会跳转到对应的代码行或编译输出窗口(部分链接错误)。
编译输出标签对应的窗口会把编译、链接、打包、部署过程中的信息都显示出来,这是我们从外面观察 Qt Creator 工作过程的极佳途径,善加使用必将获益良多。
应用程序输出标签对应的窗口会显示应用程序使用标准输出打印的信息,APK 运行后, logcat 的日志也会显示在这里。
其它标签不再细说,开发过程中使用几次就熟悉了。
标号为 6 的区域,就是代码编辑区。
标号为 7 的区域,是侧边栏、项目管理区域,这里允许开发者以项目、类视图、大纲、文件系统、类型层次、打开文档等等方式来管理项目。
项目选项
介绍完了我们的好伙伴——项目管理与代码编辑界面,接下来我们继续完成 "Hello Qt on Android" 的项目配置。点击前面介绍的标号为 2 的项目标签,会看到下面的项目选项配置界面:
我们的新建工程,默认选中了 "Desktop Qt 5.2.0 MinGW 32bit" 这个套件。请注意上图左下蓝线标出的按钮,前面提到,它是构建版本选择按钮,现在显示的是电脑图标配Debug字样。
点击标号为 1 的区域中的构建按钮(蓝色圆圈所在),切换到 "Android for armeabi" 套件,进行构建相关的配置。如下图:
构建配置选项繁多,对于我们的第一个应用,只要关注途中标识出的 1 和 2 两个功能怎么使用即可。
标号为 1 的按钮,点击可以切换到"运行"选项配置,马上就能看到。
标号为 2 的组合框,可以选择构建版本(一般是 Debug / Release 两个)。它完成和左边栏下蓝色圆圈标识的构建版本按钮一样的功能。我们这里选择 "Release" 构建。
注意蓝色圆圈标识区域,随着我们选中 "Android for armeabi" 套件和 "Release" 构建,它从电脑图标变成了安卓小机器人配 "Release" 字样的按钮。
好啦,现在让我们点击标号为 1 的"运行"按钮,进行运行选项配置。对目前这个项目来说,运行配置远比构建配置复杂,请擦亮眼睛,用心体会。
切换到运行配置,界面如上图所示。先来看部署配置,点击图中标号为 1 的 "详情" 按钮,打开部署配置详情界面:
希望你没被吓到,我在上图中作了 9 处标识,比之前的编辑界面( 7 个标识)还多。让我们化繁为简,一个一个来看。
标号为 1 的下拉框,可以选择应用针对的目标 SDK 版本,这里默认是 android-17。我得说( 先请大神 BogDan Vatra 见谅 ) Qt Creator 的这种显示不够完美,如果鼠标悬停在下拉框上时悬浮窗提示一下会更好。
我这里简要说明一下 Qt Creator 中的这个配置选项。实际上它对应 Android APK 的主配置文件 AndroidManifest.xml 中的 android:targetSdkVersion 配置项。这个配置项允许你指定你的应用针对的Android API Level ,而吊诡的是,它使用 sdkVersion 来作为标签,容易引起混淆。实际上,现在我们可以简单地把 sdkVersion 和 API Level 理解为同一个东西,细微差别以后再说。
为了让大家对 Android API Level 有个概念,我截取了 Google Android 在线手册(请访问页面" http://developer.android.com/guide/topics/manifest/uses-sdk-element.html" )中的一幅图放在下面:
标号为 2 的"对包签名"复选框,选中时 Qt Creator 会自动对 APK 进行签名。而一旦你选中了它,就需要提供一个密钥文件( keystore )供 Qt Creator 使用。 如果没有,则点击标号为 3 的 "Create" 按钮, Qt Creator 会帮你创建一个;如果有,可以点击 "Browse" 选择。
标号为 4 的单选框,是 Qt 库布署策略中的一个,用 Ministro 服务安装 Qt 。我们推荐使用这个,具体原因会在" Qt 库的部署策略"一节详细介绍。另外一个可用的策略是把 Qt 库打包到你的 APK 中。
标号为 5 的复选框,选中时 Qt Creator 会在打包完成后打开包所在的目录,方便开发者访问生成的 APK 。
标号为 6 的浮现选,对应日志输出选项。
标号为 7 的按钮, "Create AndroidManifest.xml" ,如按钮名所示,帮助你创建并配置 APK 的主配置文件 AndroidManifest.xml 。如果你不点这个按钮呢, Qt Creator 会使用默认的选项帮你创建一个默认的配置文件。建议创建并配置它,否则你的 APK 包名什么的都会让你觉得怪怪的有点不舒服。
标号为 8 的按钮,"Install Ministro from APK",则是 Qt Creator 提供给我们的一个贴心服务,允许我们把下载到本地的 Ministro APK 安装到 Android 设备上。顺便说下,我在完成 "Hello Qt on Android" 项目时就遇到了无法安装 Ministro 服务的问题,我的 XT882 电信定制版手机,根本访问不到 Google Play。
标号为 9 的区域有两个按钮,允许我们添加依赖库。现在的工程用不到,以后再说。
啊,天,终于说完了,你睡着了嘛,醒醒,我们继续往下看。
创建密钥文件和证书
让我们回到签名选项(别忘了,标号 2 ),选中它,然后点击标号为 3 的 "Create" 按钮,创建密钥文件和证书。你会看到下面的界面(空空如也,没错,是初始界面嘛):
如上图所示,有很多选项,照着填写就行,错了会有提示。我配置好后截了图,在下面,请参照着检查你的配置:
点击"保存"按钮,会弹出文件选择对话框,让你选择密钥文件的保存位置,你也可以修改它的名字。下面是我的配置截图,供参考:
点击——,哦,等下,先记住你刚才起的文件名和保存的位置(在市场中更新 APK 必须要使用和之前发布版本相同的签名),后面还要用到,然后再点击"保存"按钮,我们会回到运行配置界面。如下图所示:
可以对照初始的运行配置截图,我把修改过的选项用蓝色横线标注出来了。
创建 AndroidManifest.xml
接下来是我们的另一个重头戏,创建 AndroidManifest.xml 文件。
好啦,下面是创建向导,允许你选择保存位置,先别动它,使用默认值(工程目录下的 android 子文件夹,回头你可以到这个位置观光一下,AndroidManifest.xml 还有你应用的图标都放在这里)就行。
直接点击"完成(F)"按钮,你会看到 Qt Creator 提供的供你编辑 AndroidManifest.xml 文件的图形化界面(当然你也可以在 Qt Creator 中查看 XML 并手动修改它)。看图:
这是个中等复杂度的界面,我做了 6 处标识,下面一一说明。
标号为 1 的编辑框,填写你的包名。如你所见,默认值是 org.qtproject.example ,看起来不那么正式。
标号为 2 的微调按钮,允许你更改应用的版本号。
标号为 3 的区域,调整最低 API Level 和 目标 API Level。
标号为 4 的区域,让你设定你的 APK 图标,有高、中、低三个尺寸(一般对应 72x72 、 48x48 、 32x32)。
标号为 5 的下拉组合框,列出了所有支持的权限,你可以考虑你的 APK 需要什么权限,选中它,点击标号为 6 的 "Add" 按钮就可以在 AndroidManifest.xml 中添加一个权限。当然你也可以点击 "Remove" 按钮来取笑一个不必要的权限。
关于 APK 的权限,这里不细说,会在"AndroidManifest.xml 介绍"一节中详细说明。对 HelloQtOnAndroid ,我保持 Qt Creator 设置的默认权限。
下面是我的配置截图,改动的部分用蓝线标注出来了,请参照检查你的配置:
Qt Creator 提供的图形化 Android Manifest 编辑界面,只支持了主要几个选项,如果你想细细调整体验掌控全局的感觉,请点击上图蓝色方框处的"XML Source"按钮,手动编辑 xml 文件。如下图所示:
和编辑 C++ 代码一样,可以在标号为 1 的编辑区来编辑 XML 文件。
谢天谢地,一百里路我们走了九十里啦,接下来就会惊吓、惊喜不断。
添加代码
虽然你已经准备好迎接惊喜,我们还是得按捺一下心情,把代码稍稍修改几行。回到编辑界面,确保你左侧项目管理窗口选中"项目"方式,展开源文件夹,双击其下的 widget.cpp ,在右侧编辑区添加一行代码:
- new QLabel("Hello Qt on Android !", this);
好了,看图:
运行程序
好啦好啦,九十九里路啦,咫尺之遥,请点击左边栏的"运行"按钮(你是否还记得), Qt Creator 会让你选择目标设备(如果环境配置正确,连接了手机或者创建了AVD),建议直接真机运行(你没有 Android 手机吗?),如下图所示:
看见了吗?选中我的老古董手机,摩托罗拉 XT882 ,Android 版本是 2.3.6 ,点击"确定"按钮,活动一下,静待奇迹出现。
哦,吓我一跳,我看见了这个界面:
忘了吗,我们前面在运行配置中勾选了"Open package location after build"选项。如果你要在市场中发布你的应用,请注意选择(图中蓝框所示)签过名的版本。
等一下,现在该看手机了。我看到了这个界面:
你是否还记得,我们选择的 Qt 库布署策略——"使用Ministro 服务安装 Qt 库"?
现在要操作手机,摸下"确定"按钮,会尝试安装 Ministro 服务。惊吓来了,我看到手机屏幕上华丽丽地闪过一个 Toast 提示“安装 Ministro 失败”,然后就是下面的图:
看样子它是到我手机上默认的安智市场中去找 Ministro 了,没找到。按返回键吧,哦,天,停在了黑屏界面,没有任何反应……好吧,请猛击手机的返回键或者小房子(主页)键。哦,桌面出来了,谢谢。至于为什么 Ministro 安装失败会出现黑屏,请阅读后续章节。
现在我们需要回头来调整运行配置,换一个 Qt 库布署策略——"在 APK 中捆绑 Qt 库"。
再次运行,再次看到 "package location" 文件夹界面……,好吧,看手机,惊喜终于来了:
现在,终于可以停下来喘口气了,我们的第一个 Qt on Android 的应用 "HelloQtOnAndroid"终于在真机上跑起来了。
如果你是第一次使用 Qt on Android,跟随我的指南走下来,是什么感觉?反正我第一次把 "Hello Qt On Android " 跑通时,还是非常振奋的,激动了大半天。毕竟, Qt 作为在移动互联网时代,是唯一可以与 Android 、 iOS 并提的跨平台应用开发框架……;毕竟,作为 C/C++ 程序猿,我们可以为 Windows 桌面、 Linux 桌面 、 Android 手机/平板、iOS、MAC OS X 、 Tizen 、 Meego 、 Windows Mobile 、 Embedded Linux 、 Symbian等等平台开发软件而不需要切换开发框架和工具,是多么令人舒心、自豪的事儿;毕竟……
好了,第一次 Qt on Android 应用的旅程到此为此。敬请期待后续文章。
特此声明:版权所有 foruok ,如需转载敬请注明出处(http://blog.csdn.net/foruok)。
我翻译的大神 BogDan Vatra 的 Qt on Android 系列文章:
- Qt on Android Episode 1(翻译)
- Qt on Android Episode 2(翻译)
- Qt on Android Episode 3(翻译)
- Qt on Android Episode 4(翻译)
我的关于 Qt on Android 的系列文章:
- Windows下Qt 5.2 for Android开发入门
- Qt for Android 部署流程分析
- Qt for Android 编译纯C工程
- Windows下Qt for Android 编译安卓C语言可执行程序
- Qt on Android: Qt Quick 之 Hello World 图文详解
- Qt on Android:QML 语言基础
- Qt on Android:Qt Quick 简介
- Qt on Android: http下载与Json解析
- Qt on Android: Android SDK安装