最近学习了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
于是,我安装了如下几项:
- Android SDK (包括Android SDK Tools 24.3.2和几个版本的SDK Platform和Google APIs)
- Android NDK (android-ndk-r11c-windows-x86)
- Apache Ant v1.9.7
- JDK 1.7.0_55
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,安装目录下的结构如下:
D:\ProgramFiles\Qt\5.6.1
├─5.6
│ ├─msvc2010_x86
│ └─Src
├─Docs
├─Examples
├─Tools
└─……(其他不重要的目录或文件)
我又在虚拟机里测试安装了一下qt-opensource-windows-x86-android-5.6.1.exe
,得到的目录结构如下:
D:\ProgramFiles\Qt\5.6.1
├─5.6
│ ├─android_armv7
│ ├─android_x86
│ ├─mingw49_32
│ └─Src
├─Docs
├─Examples
├─Tools
│ └─mingw492_32
└─……(其他不重要的目录或文件)
从上面两个目录结构的对比中可以看出,Qt 5.6.1在不同编译平台下的安装文件的区别就在于5.6
目录下和Tools
目录下的对应内容。
于是,我将虚拟机中的5.6\android_armv7
、5.6\android_x86
、5.6\mingw49_32
、Tools\mingw492_32
这几个文件夹复制到主机中安装了Qt 5.6.1 VS2010的对应目录下。现在汇总的目录结构如下:
D:\ProgramFiles\Qt\5.6.1
├─5.6
│ ├─android_armv7
│ ├─android_x86
│ ├─mingw49_32
│ ├─msvc2010_x86
│ └─Src
├─Docs
├─Examples
├─Tools
│ └─mingw492_32
└─……(其他不重要的目录或文件)
其中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平台),点击构建按钮,成功构建。
此时可能会出现如下错误:
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.
<property name="aidl" location="${android.build.tools.dir}/aidl${exe}" />
<property name="aapt" location="${android.build.tools.dir}/aapt${exe}" />
<property name="dx" location="${android.build.tools.dir}/dx${bat}" />
<property name="zipalign" location="${android.build.tools.dir}/zipalign${exe}" />
于是,用文本编辑器打开D:\ProgramFiles\Android\sdk\tools\ant\build.xml
,在第484行处添加上面几行内容,保存。
重新点击Qt Creator的构建按钮,又出现了如下错误:
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
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
makefile:820: recipe for target 'install_target' failed
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.
make (e=2): 系统找不到指定的文件。
mingw32-make: [install_target] Error 2 (ignored)
注意到上面有一行命令是cp
,cp
是Linux系统中的复制命令,在Windows系统中对应的是copy
,问题就出在这儿。
查看该工程Android平台build目录(build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug
)下的Makefile,发现里面有下面这段内容:
COPY = cp -f
COPY_FILE = cp -f
COPY_DIR = cp -f -R
而在VS2010平台build目录(build-AndroidTest-Qt_5_6_1-Debug
)下的Makefile中的对应内容为:
COPY = copy /y
COPY_FILE = copy /y
COPY_DIR = xcopy /s /q /y /i
对比其中的cp
和copy
两个命令,可以由此确定是因为构建套件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开发环境搭建及测试过程记录的更多相关文章
-
Android开发环境搭建全程演示(jdk+eclipse+android sdk)
全程演示android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本 一 相关下载 (1) java JDK下载: 进入该网页: http://java.sun.com/java ...
-
Java、Android 开发环境搭建
一.准备工作 为便于管理,将java开发工具集中到一个文件夹中.创建D:\javaDevE文件夹,JDK.Android-SDK.Eclipse.tomcat等都可以安装到这个文件夹中. 二.搭建Ja ...
-
Android开发环境搭建相关文章列表(转载)
Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,截止到目前为止Android已经更新Android5.0.1, ...
-
Android开发环境搭建及常见问题解决方法
转自: http://www.cnblogs.com/rwxwsblog/p/4769785.html 在移动互联网的时代,Android的份额早已超过了苹果.Android的出现无疑加速了移动互联网 ...
-
Ionic Android开发环境搭建 下
上篇 Ionic 安装完成了,由于要开发Android,所以必不可少需要继续搭建Android开发环境. 首先,下载并安装JDK.然后配置一下环境变量. 接着,下载并安装Android SDK.下载过 ...
-
android 开发环境搭建 (转)
最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环 境去学习,Android的更新速度比较快了,Android1 ...
-
Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...
-
Qt For Android 开发环境配置
想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt ...
-
linux android开发环境搭建
android开发环境搭建的一些有用链接:1.sdk manager的国内服务器http://www.cnblogs.com/huangjacky/p/4077982.html2.常见问题的解决htt ...
随机推荐
-
企业搜索引擎开发之连接器connector(三十)
连接器里面采用的什么样的数据结构,我们先从Document迭代器开始入手,具体的Document迭代器类都实现了DocumentList接口,该接口定义了两个方法 public interface D ...
-
Java 环境下使用 AES 加密的特殊问题处理
在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 ...
-
Linux上夏时令的应对
问题 今天,有游戏客户找来说,2016.11.6号洛杉矶将会进入冬时令,他们在洛杉矶机房的ECS在使用的是洛杉矶的当地时间,问我,进入冬时令,对他们的linux有啥影响?是否需要做好,批量修改linu ...
-
vim温馨提示
(一)各种文本操作 各种跳转 h,j,k,l h左移一个字符,j下移一行,k上移一行,l右移一个字符 w.b w 下一个单词,b上一个单词 0,$ 行首,行尾 G,gg.30% 3G跳到第3行,g ...
-
[ios2] 关于CGBitmapContextCreate【转】
CGContextRef CGBitmapContextCreate ( void *data, size_t width, size_t height, size_t bitsPerComponen ...
-
ANDROID基础ACTIVITY篇之ACTIVITY的生命周期(二)
除了Activity的七大生命周期方法外外,还有两个相当重要的方法需要大家熟记那就是onSavelnstanceState()和onRestoreinstanceState(). 那么什么时候会调用这 ...
-
微信小程序用户信息解密失败导致的内存泄漏问题。
微信小程序获取用户解密的Session_key 然后对 encryptedData进行解密 偶尔报错 时间长了之后会报内存溢出: java.lang.OutOfMemoryError: GC over ...
-
Open Live Writer安装教程
配置步骤: 1.在菜单中选择"工具">"帐户",出现下面的画面: 2.点击"添加按钮",在出现的窗口中选择"其他日志服务&q ...
-
codeforces604B
More Cowbell CodeForces - 604B Kevin Sun wants to move his precious collection of n cowbells from Na ...
-
CentOS 7下搭配简单的C语言开发环境
在CentOS 7下安装gcc,gcc是编译和运行C语言的工具, 安装命令: yum install gcc 中途如果有询问则输入y 安装成功后,通过以下命令 gcc --version 来查看安装的 ...