最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发。

QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行Android开发。本文记录了Qt for Android环境搭建及测试过程。

本文使用Qt 5.6.1版本。

1. 下载Qt for Android

Qt for Android (5.6.1)安装包下载地址:http://download.qt.io/archive/qt/5.6/5.6.1/qt-opensource-windows-x86-android-5.6.1.exe

2. 安装Android依赖环境

参考Qt for Android官方网站:Getting Started with Qt for Android | Qt 5.7,可知需要安装如下几项:

  • Android SDK (包括Android SDK Tools和Android Debug Bridge(ADB))
  • Android NDK
  • Apache Ant v1.8 or later
  • Java SE Development Kit (JDK) v6 or later

于是,我安装了如下几项:

3. 安装Qt for Android

如果之前没有安装过Qt 5.6.1的任何平台版本(包括VS2015、VS2013等),则可以直接双击运行qt-opensource-windows-x86-android-5.6.1.exe,按提示进行安装即可。

但如果之前安装过Qt 5.6.1,比如我之前安装了Qt 5.6.1 VS2010 x86,安装目录下的结构如下:

  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. │ ├─msvc2010_x86
  4. │ └─Src
  5. ├─Docs
  6. ├─Examples
  7. ├─Tools
  8. └─……(其他不重要的目录或文件)

我又在虚拟机里测试安装了一下qt-opensource-windows-x86-android-5.6.1.exe,得到的目录结构如下:

  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. │ ├─android_armv7
  4. │ ├─android_x86
  5. │ ├─mingw49_32
  6. │ └─Src
  7. ├─Docs
  8. ├─Examples
  9. ├─Tools
  10. │ └─mingw492_32
  11. └─……(其他不重要的目录或文件)

从上面两个目录结构的对比中可以看出,Qt 5.6.1在不同编译平台下的安装文件的区别就在于5.6目录下和Tools目录下的对应内容。

于是,我将虚拟机中的5.6\android_armv75.6\android_x865.6\mingw49_32Tools\mingw492_32这几个文件夹复制到主机中安装了Qt 5.6.1 VS2010的对应目录下。现在汇总的目录结构如下:

  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. │ ├─android_armv7
  4. │ ├─android_x86
  5. │ ├─mingw49_32
  6. │ ├─msvc2010_x86
  7. │ └─Src
  8. ├─Docs
  9. ├─Examples
  10. ├─Tools
  11. │ └─mingw492_32
  12. └─……(其他不重要的目录或文件)

其中Tools\mingw492_32目录相当于MinGW编译器的安装目录,需要将Tools\mingw492_32\bin的绝对路径添加到系统Path环境变量中,否则后面Qt Creator会找不到mingw32-make.exe文件。

OK,到这里就算安装完成了。

4. 后续配置

安装完之后,就是在Qt Creator中配置Qt路径了,比较简单,就不再赘述了。

我的电脑上配置完之后如下(在Qt Creator中选择"工具"->"选项"来查看):





5. 测试

打开Qt Creator,新建一个工程,配置如下:







选择构建套件为Qt 5.6.1(即VS2010平台),点击构建按钮,成功构建。

再点击运行按钮,成功运行可以看到一个Hello World界面:

然后选择构建套件为Android for armeabi-v7a (GCC 4.9, Qt 5.6.1)(即Android平台),点击构建按钮,成功构建。

此时可能会出现如下错误:

  1. Execute failed: java.io.IOException: Cannot run program…${aapt}": error=2, No such file or directory

解决办法参考:android - ant jar error: Execute failed: …… - Stack Overflow

Have you updated the Android SDK tools to 24.3.2? This seems to have caused the issue. Add following 4 lines to android-sdk-path/tools/ant/build.xml starting line 484 and hopefully it should solve.

  1. <property name="aidl" location="${android.build.tools.dir}/aidl${exe}" />
  2. <property name="aapt" location="${android.build.tools.dir}/aapt${exe}" />
  3. <property name="dx" location="${android.build.tools.dir}/dx${bat}" />
  4. <property name="zipalign" location="${android.build.tools.dir}/zipalign${exe}" />

于是,用文本编辑器打开D:\ProgramFiles\Android\sdk\tools\ant\build.xml,在第484行处添加上面几行内容,保存。

重新点击Qt Creator的构建按钮,又出现了如下错误:

  1. 02:23:45: 正在启动 "D:\ProgramFiles\Qt\5.6.1\Tools\mingw492_32\bin\mingw32-make.exe" "INSTALL_ROOT=D:/ProgramData/QtCreatorProjects/AndroidTest/build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug/android-build" install
  2. cp -f libAndroidTest.so D:/ProgramData/QtCreatorProjects/AndroidTest/build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug/android-build/libs/armeabi-v7a/libAndroidTest.so
  3. makefile:820: recipe for target 'install_target' failed
  4. process_begin: CreateProcess(NULL, cp -f libAndroidTest.so D:/ProgramData/QtCreatorProjects/AndroidTest/build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug/android-build/libs/armeabi-v7a/libAndroidTest.so, ...) failed.
  5. make (e=2): 系统找不到指定的文件。
  6. mingw32-make: [install_target] Error 2 (ignored)

注意到上面有一行命令是cpcp是Linux系统中的复制命令,在Windows系统中对应的是copy,问题就出在这儿。

查看该工程Android平台build目录(build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug)下的Makefile,发现里面有下面这段内容:

  1. COPY = cp -f
  2. COPY_FILE = cp -f
  3. COPY_DIR = cp -f -R

而在VS2010平台build目录(build-AndroidTest-Qt_5_6_1-Debug)下的Makefile中的对应内容为:

  1. COPY = copy /y
  2. COPY_FILE = copy /y
  3. COPY_DIR = xcopy /s /q /y /i

对比其中的cpcopy两个命令,可以由此确定是因为构建套件Android for armeabi-v7a (GCC 4.9, Qt 5.6.1)(即Android平台)生成的Makefile是只适用于Linux平台的。

(注:我试过在"工具"->"选项"中修改该构建套件生成的Makefile的类型,但是不管选择哪种Makefile类型,生成的Makefile中都是cp而不是copy。)

于是考虑在Windows系统中搭建虚拟Linux环境。

MSYS可以解决我的这个问题!

MSYS,即Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。与Cygwin大致相当。

于是下载MSYS,安装,然后将其bin路径添加到系统Path环境变量中。

再次点击Qt Creator的构建按钮,OK,成功构建!

最后点击运行,可以选择安装到Android模拟器或是真机,安装apk后可以看到和Windows平台上界面类似的Android界面:







到此,Qt for Android开发环境搭建以及测试全部完成!

Qt for Android开发环境搭建及测试过程记录的更多相关文章

  1. Android开发环境搭建全程演示(jdk+eclipse+android sdk)

    全程演示android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本 一 相关下载 (1) java JDK下载: 进入该网页: http://java.sun.com/java ...

  2. Java、Android 开发环境搭建

    一.准备工作 为便于管理,将java开发工具集中到一个文件夹中.创建D:\javaDevE文件夹,JDK.Android-SDK.Eclipse.tomcat等都可以安装到这个文件夹中. 二.搭建Ja ...

  3. Android开发环境搭建相关文章列表(转载)

    Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,截止到目前为止Android已经更新Android5.0.1, ...

  4. Android开发环境搭建及常见问题解决方法

    转自: http://www.cnblogs.com/rwxwsblog/p/4769785.html 在移动互联网的时代,Android的份额早已超过了苹果.Android的出现无疑加速了移动互联网 ...

  5. Ionic Android开发环境搭建 下

    上篇 Ionic 安装完成了,由于要开发Android,所以必不可少需要继续搭建Android开发环境. 首先,下载并安装JDK.然后配置一下环境变量. 接着,下载并安装Android SDK.下载过 ...

  6. android 开发环境搭建 (转)

    最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环 境去学习,Android的更新速度比较快了,Android1 ...

  7. Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通

    原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...

  8. Qt For Android 开发环境配置

    想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt ...

  9. linux android开发环境搭建

    android开发环境搭建的一些有用链接:1.sdk manager的国内服务器http://www.cnblogs.com/huangjacky/p/4077982.html2.常见问题的解决htt ...

随机推荐

  1. 通过配置Mysql参数提高写入速度

    1) innodb_buffer_pool_size 如果用Innodb,那么这是一个重要变量.相对于MyISAM来说,Innodb对于buffer size更敏感.MySIAM可能对于大数据量使用默 ...

  2. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)

    前言:之前的两篇封装了一些基础的表单组件,这篇继续来封装几个基于bootstrap的其他组件.和上篇不同的是,这篇的有几个组件需要某些js文件的支持. 本文原创地址:http://www.cnblog ...

  3. java之并发编程线程池的学习

    如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间. java.uitl.concurrent.Thre ...

  4. h5面试题集合

    一.闭包的理解: 使用闭包主要是为了设计私有的方法和变量.闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露. 闭包三个特性: 1.函数嵌套函数 ; ...

  5. caffe代码调试小结

    RELULayer层 bottom[0]->count=n*c*w*h=50*96*56*56 count=50*96*56*56,根据bottom_data[i]访问所有的数据(多维数组都是一 ...

  6. <Script>放置位置

    html文件是自上而下的执行方式 css引入执行加载时,程序仍然往下执行 script脚本是则中断线程,待该script脚本执行结束之后程序才继续往下执行 页面效果实现类的js放在body之前,动作, ...

  7. iOS - 对UIColor颜色反差

    iOS中默认的很多方法可以获得不同种颜色的UIColor对象,但是White和Black等灰度值其实是用灰阶透明度调制 +colorWithWhite:alpha:,这些CGColorRef拥有2个组 ...

  8. Android Automotive开发之一《编译自己的SDK 》 // TOBEDONE

    自己动手编译最新Android源码及SDK : http://blog.csdn.net/dd864140130/article/details/51718187官方文档,怎样编译sdk : http ...

  9. 个人作业——week2

    一.发现的功能性bug 1.这个手机客户端的拍照翻译功能虽然能够正确的识别图像,但是不能有效的识别出图像中的文字,给出的提示总是图像识别成功,没有识别到文字,导致这个功能几乎无法使用. 因为刚下载这个 ...

  10. mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

    一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...