搭建Qt5.1.0 Beta的Android开发环境

抽了一个周末研究Qt5.1.0Beta的安卓开发环境该怎么搭建。两天时间过去了,也算是有些小成果吧,在这里给大家分享分享。

首先让我们看看Qt5.1.0Beta的新特性。除了一些模块内大大小小的更改外,我们还发现了它可以支持静态编译和安卓和iOS构建目标的支持。静态编译这部分先放在一边,我们来看看Qt5.1.0是如何支持安卓开发环境的。

在此声明,此过程繁琐,若想用此制作软件产品,还希望大家再等到Qt5.2的稳定版发布。此教程仅适用于Linux操作系统,我使用的版本是Ubuntu 13.04。

1、准备一些必要的开发包

按照qt-project里面的指示,我们需要下载安卓的SDK,NDK,Apache的Ant,以及OpenJDK。安卓的SDK和NDK是在构建Qt安卓版本必须的开发包,在make阶段需要用到SDK中的jar包和tools,需要用到NDK中的头文件和源文件以实现对QtAndroid插件的封装。而OpenJDK和Ant则是在应用程序打包成apk的时候必须用到的。为了方便大家,我把下载地址放出来。

安卓SDK,这里我下载了ADT,里面附带了Eclipse和SDK,Eclipse请无视掉吧。

安卓NDK

OpenJDK,在Ubuntu下可输入sudo apt-get install openjdk-6-jre

Ant

2、下载Qt5.1.0Beta

不要下载二进制包,我们要自己编译,所以我们需要下载源码包。这里给出了链接,以后链接失效了,还可以在这里查找。

3、解压源码包

本来解压什么的应该不是什么问题,但在后面阶段出现了莫名的^M符号,这时我开始怀疑是不是解压这一步出错了……

其实开始解压是使用GUI的归档管理器来进行的,默认情况下会出现文本编码的问题。所以在解压缩的时候,为了防止将源码的文本文件更改文本格式,需要在控制台下手动解压。假设已进入“下载”文件夹,压缩包名为Qt5.1.0Beta.zip,解压的位置是~/Programs/Qt5.1.0ForAndroid,那么需要这么写:

unzip -a Qt5.1.0Beta.zip -d ~/Programs/Qt5.1.0ForAndroid

取消qt-everywhere-opensource-src-5.1.0-beta1文件夹,直接将其中的内容放在Qt5.1.0ForAndroid中,我喜欢简单的文件夹名。

4、开始configure

解压完毕后,进入~/Programs/Qt5.1.0ForAndroid文件夹,这里开始了configure阶段了。我倾向于解压在哪儿,qmake就在哪儿,这样可以节省make install步骤,但是需要的同学可以试着加上-prefix参数,设置安装的位置。这里我就按照官网上的步骤顺势写出configure了。

./configure -developer-build -xplatform android-g++ -nomake tests -nomake examples -android-ndk 你的NDK路径 -android-sdk 你的SDK路径 -android-ndk-host 是32位Linux操作系统就填linux-x86,64位就填linux-x86_64 -skip qttranslations -skip qtwebkit -skip qtserialport -skip qtwebkit-examples

以下是我的configure参数

./configure -developer-build -xplatform android-g++ -nomake tests -nomake examples -android-ndk /home/jiangcaiyang/Programs/android-ndk-r8e -android-sdk /home/jiangcaiyang/Programs/adt-bundle-linux-x86-20130514/sdk -android-ndk-host linux-x86 -skip qttranslations -skip qtwebkit -skip qtserialport -skip qtwebkit-examples

如果大家默认都选开源的版本,那么上面的参数中添加-opensource,可以减少询问。

另外不可静态编译安卓版本,因为在链接自己写的代码的目标文件时会出现cannot find -lqandroid错误。看来qandroid还是必须要以插件的形式存在才行。

5、开始make

make阶段的错误出现得最多,所以要格外重视。

如果没有做准备工作,那么make似乎也能进行,但是编译的库函数不完全,以至于无法在模拟器上运行apk程序。

为了防止找不到相关的路径,需要添加两个安卓环境变量。这里直接在控制台上输入:

export ANDROID_SDK_ROOT=/home/jiangcaiyang/Programs/adt-bundle-linux-x86-20130514/sdk

export ANDROID_API_VERSION=android-17

为了防止找不到javac等java编译工具,需要在/etc/profile中添加JAVA_HOME环境变量:

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386

为了防止找不到dx工具和dx.jar包,需要将dx和dx.jar从adt-bundle-linux-x86-20130514/sdk/build-tools/android-4.2.2和adt-bundle-linux-x86-20130514/sdk/build-tools/android-4.2.2/lib中转至/home/jiangcaiyang/Programs/adt-bundle-linux-x86-20130514/sdk/platform-tools中。(这里以我安装的路径为例)

为了防止出现QtMultimedia for Android requires API level 11错误,需要将$${QT_DIR}/qtmultimedia/qtmultimedia.pro这条语句:

!qtCompileTest(android):error("QtMultimedia for Android requires API level 11")

使用#号注释掉。

如果一切顺利,将会看不到任何PROJECT ERROR。

相关推荐