最近学习了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. [LeetCode] Sudoku Solver 求解数独

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  2. python基础-生成随机字符串方法

    python解释器示例 >>> import uuid >>> uuid.uuid1() UUID('ae6822e6-c976-11e6-82e0-0090f5f ...

  3. java 导出word 并下载

    记录一下导出操作 源码: /************ * 导出word 并下载 * @param id 房号记录编号 * ***********************/ @RequestMappin ...

  4. 【BZOJ 1005】【HNOI 2008】明明的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1005 答案是\[\frac{(n-2)!}{(n-2-sum)!×\prod_{i=1}^{cnt} ...

  5. How to Disable Strict SQL Mode in MySQL 5.7

    If your app was written for older versions of MySQL and is not compatible with strict SQL mode in My ...

  6. 【编码】_C#中编码名称(Name)与页面标识(CodePage)的关系_编码gb2312的获取

    在写C#代码时,发现VS提供没有直接提供gb2312的中文编码, 所以,需要找到对应编码名称的codepage来调用想要的编码方式. 下面是微软编程提供的所有编码信息,包括编码名称,编码代码页标识符, ...

  7. Android——WebView

    WebView用途 通过Intent调用系统浏览器: 引言: Uri uri = Uri.parse(url);//url为你要链接的地址 Intent intent = new Intent(Int ...

  8. 调戏OpenShift:一个免费能干的云平台

    一.前因后果 以前为了搞微信的公众号,在新浪sae那里申请了一个服务器,一开始还挺好的 ,有免费的云豆送,但是一直运行应用也要消费云豆,搞得云豆也所剩无几了.作为一名屌丝,日常吃土,就单纯想玩一玩微信 ...

  9. BZOJ 2006: [NOI2010]超级钢琴

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2613  Solved: 1297[Submit][Statu ...

  10. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...