yafeilinux 发表于 2019-2-19 22:31:30

第2篇 Qt Quick入门教程之基础(二)搭建Qt Android开发环境

http://files.qter.org/forum/201902/18/111113cqvyyamqcic8r5yk.jpg.thumb.jpg


## 导语

在第一篇文章中我们已经创建了第一个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示例程序编译运行到手机上测试下效果了吧!希望大家玩的高兴!




期待下一篇文章!

------


返回目录



谁啊 发表于 2019-2-26 09:56:22

yafeilinux 发表于 2019-2-23 12:39
安装Qt的时候选择ARM EABI v7a库;sdk里面下载ARM EABI v7a System Image;创建AVD的时候target选择Andro ...

感谢亚飞,成功了
分享一下
我感觉还是在当初安装时没有选择正确,后来虽然安装了 android-ndk-r16b、android-sdk-windows、jdk-iu201-windows-x64.exe ,按教程配置后,AVD(安卓虚拟机)是灰的,被列在不兼容设备中。后来又安装了android-ndk-r18b,还是不成功
经亚飞提醒后,
我把QT完全卸载了,用的是your uninstaller这个软件
然后下载了 3个G的大包qt-opensource-windows-x86-5.12.1.exe 进行安装 ,为了稳妥起见安装组件全部选择了。
QT SDK qt-creator-opensource-windows-x86_64-4.8.1.exe 我没有安装,不知有什么问题没有。
1安装完成后还是不成功,检查
工具-选项-Kits-Debuggers 发现 Android Debugger 对应的 Location 的值是 android-ndk-r16b的目录,

工具-先项-设备-Android-Android NDK的路径值 android-ndk-r18b
不一致,而且无法移除,为稳妥起见,再次卸载QT
然后将android-ndk-r16b的目录删除,android-ndk-r18b的目录保留
再次重新安装,这次 可以了,在Select Android Device窗口中,MyAVD属于兼容设备,显示OpenGL unenbled,点OK,启动myAVD,可以看到载入了项目窗体,但是没有显示 hello Android
回到AVD Manager,选中myAVD,点Edit,选中找到Emulation Options: 选中Use Host GPU,一路OK

然后成功了。

以上分享,给网友提供一条思路

谁啊 发表于 2019-2-23 07:33:03

然而我在 选择安卓设备 时 ,MyAVD被归到不兼容设备之中,OK是灰的。。

重装了几次android开发包。。。

yafeilinux 发表于 2019-2-23 12:39:28

谁啊 发表于 2019-2-23 07:33
然而我在 选择安卓设备 时 ,MyAVD被归到不兼容设备之中,OK是灰的。。

重装了几次android开发包。。。 ...

安装Qt的时候选择ARM EABI v7a库;sdk里面下载ARM EABI v7a System Image;创建AVD的时候target选择Android 7.0-API Level 24;这几个对应一下。

叶脉 发表于 2019-3-2 16:13:22

你好老师,我按您的教程运行后显示Can't find Ministro Devices怎么解决,困扰我两天了:'(

叶脉 发表于 2019-3-2 16:47:13

叶脉 发表于 2019-3-2 16:13
你好老师,我按您的教程运行后显示Can't find Ministro Devices怎么解决,困扰我两天了 ...

已经解决了,不用安装ministro,是我安装虚拟环境为了点usb host:$

FzLib 发表于 2019-3-17 16:55:26

配置出问题是怎么回事?

一叶知秋 发表于 2019-3-21 11:06:03

打卡

minple 发表于 2019-3-24 12:40:14

我的Qt是5.12.2    Android和Java的选择和老师的一样但是编译APk的不成功
Command does not exist: D:\software\Android\android-ndk-r16b-windows-x86_64\android-ndk-r16b/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-readobj.exe
Command does not exist: D:\software\Android\android-ndk-r16b-windows-x86_64\android-ndk-r16b/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-strip.exe

提示的是这个问题

minple 发表于 2019-3-24 17:58:57

minple 发表于 2019-3-24 12:40
我的Qt是5.12.2    Android和Java的选择和老师的一样但是编译APk的不成功
Command does not exist: D:\so ...

OK了我把NDK换成18就好了

734140764 发表于 2019-5-11 20:15:06

请问为什么我的sdkmanager.exe运行不起来,,只有cmd窗口一闪而过,没有界面

sakamotomari 发表于 2019-5-16 05:14:07

734140764 发表于 2019-5-11 20:15
请问为什么我的sdkmanager.exe运行不起来,,只有cmd窗口一闪而过,没有界面

我昨天遇到了类似的问题,现在谷歌不提供sdkmanager.exe的服务了,官方只能下载到command line tool,是个批处理运行文件。有需要的话可以参考下我的记录,在CSDN博客,标题是“Win10中Qt Android配置 - SDK Command Line”。我不能发url,所以就只能这么说了哈哈哈。

重点就是这些:
打开cmd工具,一路cd到sdkmanager.bat所在的文件夹,先运行了一下这个批处理文件,接着输入:

sdk --list --channel=0
然后参考官方指导,安装需要的package,应该就行了。
比如:
sdkmanager "build-tools;28.0.3"
sdkmanager "platform-tools" "platforms;android-28"

wclildy 发表于 2019-6-10 20:57:31

你好,请问一下。

Generating Android Package
Input file: F:/work/QtAndroidPrj/1/1/android-lib1.so-deployment-settings.json
Output directory: F:/work/QtAndroidPrj/1/1/android-build/
Application binary: F:/work/QtAndroidPrj/1/1/lib1.so
Android build platform: android-24
Install to device: No
-- Skipping E:/Qt/5.12.3/android_armv7/plugins/iconengines/libqsvgicon.so. It has unmet dependencies: lib/libQt5Svg.so.
-- Skipping E:/Qt/5.12.3/android_armv7/plugins/imageformats/libqsvg.so. It has unmet dependencies: lib/libQt5Svg.so.
:checkDebugClasspath UP-TO-DATE
:preBuild UP-TO-DATE
:preDebugBuild UP-TO-DATE
:compileDebugAidl FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileDebugAidl'.
> java.io.IOException: com.android.ide.common.process.Proces**ception: Error while executing process F:\work\QTFORANDROID\android-sdk_r24.4.1-windows\android-sdk-windows\build-tools\29.0.0\aidl.exe with arguments {-pF:\work\QTFORANDROID\android-sdk_r24.4.1-windows\android-sdk-windows\platforms\android-24\framework.aidl -oF:\work\QtAndroidPrj\1\1\android-build\build\generated\source\aidl\debug -IF:\work\QtAndroidPrj\1\1\android-build\src -IF:\work\QtAndroidPrj\1\1\android-build\aidl -IF:\work\QtAndroidPrj\1\1\android-build\src\debug\aidl -IE:\Qt\5.12.3\android_armv7\src\android\java\src -dC:\Users\94388\AppData\Local\Temp\aidl349251454838806796.d E:\Qt\5.12.3\android_armv7\src\android\java\src\org\kde\necessitas\ministro\IMinistro.aidl}

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

BUILD FAILED in 1m 17s
3 actionable tasks: 1 executed, 2 up-to-date
Building the android package failed!
-- For more information, run this command with --verbose.
20:50:14: 进程"E:\Qt\5.12.3\android_armv7\bin\androiddeployqt.exe"退出,退出代码 14 。
Error while building/deploying project 1 (kit: Android for armeabi-v7a (Clang Qt 5.12.3 for Android ARMv7))
When executing step "Build Android APK"
20:50:14: Elapsed time: 01:25.

我出现这个问题,应该如何解决呢。

使用的是
android-ndk-r19c-windows-x86_64
android-sdk_r24.4.1-windows
jdk-8u212-windows-x64
这几个

yafeilinux 发表于 2019-6-10 21:12:37

wclildy 发表于 2019-6-10 20:57
你好,请问一下。

Generating Android Package


是第一次运行吗,是64位系统吧?如果可以确保流程设置都没有问题,建议下载Qt 5.12.0测试下。

wclildy 发表于 2019-6-11 09:09:23

yafeilinux 发表于 2019-6-10 21:12
是第一次运行吗,是64位系统吧?如果可以确保流程设置都没有问题,建议下载Qt 5.12.0测试下。 ...

是第一次运行,电脑win10 64位。流程没问题,而且我笔记本(win10 64)和台式机(win10 64)都是一样的错误,按你说的我再试试。
谢谢

wclildy 发表于 2019-6-11 20:29:27

yafeilinux 发表于 2019-6-10 21:12
是第一次运行吗,是64位系统吧?如果可以确保流程设置都没有问题,建议下载Qt 5.12.0测试下。 ...

全部卸载,使用和你上文给的相同版本的文件,依旧是相同的错误:'(,难受了,请问你还有啥指导吗

yafeilinux 发表于 2019-6-11 21:49:44

wclildy 发表于 2019-6-11 20:29
全部卸载,使用和你上文给的相同版本的文件,依旧是相同的错误,难受了,请问你还有啥指导吗 ...

用win10没有测试过,教程用的是win7 64位的。你把所有东西都安装到C盘试试。

wclildy 发表于 2019-6-14 16:08:09

本帖最后由 wclildy 于 2019-6-14 16:10 编辑

yafeilinux 发表于 2019-6-11 21:49
用win10没有测试过,教程用的是win7 64位的。你把所有东西都安装到C盘试试。 ...
你好,非常感谢。换了好多版本,现在终于成功了,安装的版本如图。

jdk-8u201-windows-x64
android-ndk-r19c-windows-x86_64
android-sdk_r24.4.1-windows

Android SDK Build-tools 没有安装最新的29.0.1的(之前一直按照最新的安装),现在使用28.0.3版本。

yafeilinux 发表于 2019-6-14 18:52:05

wclildy 发表于 2019-6-14 16:08
你好,非常感谢。换了好多版本,现在终于成功了,安装的版本如图。

jdk-8u201-windows-x64


能用就好,现在的版本兼容确实不怎么好,需要自己去匹配。

mange007 发表于 2019-7-7 09:02:09

编译的时候提示这个,没有编译成功啊。
页: [1] 2
查看完整版本: 第2篇 Qt Quick入门教程之基础(二)搭建Qt Android开发环境