在第一篇文章中我们已经创建了第一个Qt Quick项目,见识了QML程序代码的简约易懂。前面曾提到,Qt Quick就是在移动开发的大背景下应运而生的。为了让广大初学者学习咱们教程更有成就感,对后面的内容能够更加斗志昂扬地学习下去,在进一步讲解QML语法之前,先来和大家一起搭建Qt Android开发环境,让我们以后每个示例程序都可以在桌面和手机上同时运行!

在Qt帮助的Qt for Android页面提供了所有相关内容的介绍,建议大家多看看帮助文档。从Qt 5开始,提供了对Android平台的支持,现在版本的Qt,其编译的程序可以运行在Android 4.1(API Level 16)以上平台中。几乎所有Qt模块都支持Android平台,除了Qt WebEngine、Qt Serial Port和平台特定的一些模块。虽然说Qt Quick更适合开发移动应用,但Qt Widgets项目理所当然也可以在Android上运行,只是效果可能差强人意。

下面开始我们的教程!

置Android开发环境

要在Qt中进行Android开发,需要使用 JDK、Android SDK 和 Android NDK 三个工具,因为我这里使用的是64位的Win 7系统,所以下载的均是64位版本,下面是下载地址及需要下载的文件,如果大家无法下载,可以到咱们Qt开源社区(www.qter.org)的下载页面进行下载。

  • JDK

地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

下载文件:jdk-8u201-windows-x64.exe

  • Android SDK

地址:http://dl.google.com/android/android-sdk_r24.4.1-windows.zip

下载文件:android-sdk_r24.4.1-windows.zip

  • Android NDK

地址:https://developer.android.google.cn/ndk/downloads/

下载文件:android-ndk-r16b-windows-x86_64.zip

下载完成后只有 JDK 需要安装,其他两个直接解压缩即可。建议将它们都安装到相同的目录内,比如我这里是D:\Android目录。

安装完成后先运行Android SDK目录下的SDK Manager.exe对Android SDK进行必要的更新。我们选择Tools目录中的Android SDK Tools、Android SDK Platform-tools和Android SDK Build-tools,这三个工具是必须的;最下面Extras目录中的Google USB Driver,这个也是必须的;以及Android 7.0(API 24)目录中的SDK Platform和ARM EABI v7a System Image,这个是根据需要选择的,前者是SDK后者是虚拟机用的镜像文件。如果大家对这个比较熟悉,那么就根据自己的需要来选择,如果不是很了解,就跟我选择一样即可。

选择完成后单击Install 6 packages按钮,这时会弹出Choose Packages to Install对话框,这里需要选中Accept License选项同意协议,单击Install进行安装。

安装完成后,回到Qt Creator选项菜单的Android设备配置界面,指定几个工具的路径。配置好后就会自动设置默认的Android构建套件Android for armeabi-v7a (Clang Qt 5.12.0 for Android ARMv7),我们就可以使用这个来编译Android应用了。

使用虚拟机模拟运行

前面我们下载了镜像文件,下面就先来看看如何在虚拟机上运行Qt Android程序吧。过程比较慢,效果不是很好,大家做个了解即可。

首先运行Android SDK目录下的 AVD Manager.exe,在这里创建一个虚拟设备。单击右侧的Create...按钮打开Create new Android Virtual Device(AVD)对话框,在其中设置AVD Name为myAVD,选择Target为Android 7.0-API Level 24选项,其他可以自行设置。

设置完成后,回到Qt Creator,按照我们上一篇的内容创建helloandroid项目,在选择构建套件时,同时选择上Android套件。

创建好以后,将main.qml内容更改如下:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Text {
        anchors.centerIn: parent
        text: qsTr("Hello Android")
    }

    MouseArea {
        anchors.fill: parent
        onClicked: Qt.quit()
    }
}

这里在界面上添加了Text文本,然后使用MouseArea使得界面可以获取鼠标点击,当鼠标点击后程序退出。具体代码我们在下一篇详细讲解。下面继续教程。

可以先在左下角的目标选择器中将构建套件选择为Desktop版本,按下Ctrl+R快捷键运行一下程序,在以后的开发中一般也是先开发桌面版本,等调试没有问题后再编译到移动平台进行测试。

然后将构建套件选择为Android版本,再次按下Ctrl+R运行程序。这时会弹出Android设备选择对话框,选择前面创建的虚拟机myAVD。

单击OK按钮启动虚拟机,慢慢等待,期待惊喜... ...

部署项目到手机上运行

如果大家亲自测试了虚拟机,我想也一定会很烦躁吧!其实可以使用X86版本的虚拟机,那个会快不少,有兴趣的可以自己尝试一下。不过,还是建议直接将程序部署到手机上进行测试,这个效果更好,而且更真实。

我这里使用的是小米8手机,其系统是基于Android 8.1.0的MIUI 10.0稳定版。要在Qt Creator中将程序部署到手机上运行,需要在手机的开发者选项中开启USB调试。小米8的开启方式是依次选择“设置→更多设置→开发者选项→USB调试、USB安装”,不过需要注意,在MIUI 10.0稳定版中需要进入“设置→我的设备→全部参数”,在“MIUI版本”上多次单击才能进入开发者模式,这样才会出现开发者选项。

当弹出是否允许USB调试的对话框,选择“确定”。然后使用数据线将手机连接到电脑,这时手机端会显示是否允许计算机进行调试,选中“一律允许使用这台计算机进行调试”选项,这样以后就不会再弹出这个提示了。

现在到Qt Creator中再次运行helloandroid程序,在Select Android Device对话框中选择小米8。如果没有出现连接的手机或显示手机不可用,可以单击Refresh Device List按钮来刷新设备。按下OK按钮将程序部署到手机上。

当部署完成时,在手机上可能会弹出是否允许USB安装应用的提示,选择“继续安装”。这时就会在手机上自动运行helloandroid程序,退出程序后可以看到,在手机上安装了一个helloandroid应用。

小结

现在Qt 5已经更新到了5.12版本,对于Android开发环境的配置也已经优化地很好了,可以看到,整个过程还是比较简单的。如果大家配置的环境无法编译运行,一般是使用的工具版本问题,这里的原则是尽量都使用64位的。如果成功配置好了环境,那么我想同学们已经迫不及待地要将Qt示例程序编译运行到手机上测试下效果了吧!希望大家玩的高兴!