zoukankan      html  css  js  c++  java
  • Qt for Android开发环境搭建及测试过程记录

    最近学习了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:ProgramFilesQt5.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:ProgramFilesQt5.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.6android_armv75.6android_x865.6mingw49_32Toolsmingw492_32这几个文件夹复制到主机中安装了Qt 5.6.1 VS2010的对应目录下。现在汇总的目录结构如下:

    1. D:ProgramFilesQt5.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. └─……(其他不重要的目录或文件)

    其中Toolsmingw492_32目录相当于MinGW编译器的安装目录,需要将Toolsmingw492_32in的绝对路径添加到系统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:ProgramFilesAndroidsdk oolsantuild.xml,在第484行处添加上面几行内容,保存。

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

    1. 02:23:45: 正在启动 "D:ProgramFilesQt5.6.1Toolsmingw492_32inmingw32-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开发环境搭建以及测试全部完成!





  • 相关阅读:
    Java 抽象类 初学者笔记
    JAVA super关键字 初学者笔记
    Java 标准输入流 初学者笔记
    JAVA 将对象引用作为参数修改实例对象参数 初学者笔记
    JAVA 根据类构建数组(用类处理数组信息) 初学者笔记
    JAVA 打印日历 初学者笔记
    Python 测试代码 初学者笔记
    Python 文件&异常 初学者笔记
    Python 类 初学者笔记
    ubuntu网络连接失败
  • 原文地址:https://www.cnblogs.com/jloveu/p/Qt-for-Android-environment-and-test-record.html
Copyright © 2011-2022 走看看