抽了一个周末研究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。
6、开始make install(可选)
如果在configure阶段指定了-prefix,那么需要make install。
7、设置环境变量
加上此前的JAVA_HOME,我们还需要的几个环境变量,不过是在QtCreator上使用的,不难。
安装QtCreator2.7,并打开。点击工具➡选项,进入选项页面。首先设置的是Qt版本,如下图。
随后设置Android选项。如下图:
这里Automatically create kits for Android tool chains可方便了,在构建套件里面自动添加了三个安卓套件,只是编译器不相同。随后启动Android AVD管理器,如下图:
点击New…添加一个模拟器,如下图:
设置一些参数就好了,随后可以点击Start…启动模拟器。如果觉得模拟器画面很卡,那么可以勾选Use Host GPU选项。
8、构建和运行
一起都设置好了,我们可以拿一个程序测试了。这里我测试了Qt的一个程序:appchooser(位于$${QT_DIR}/qtbase/examples/widgets/animation中)。
用QtCreator打开appchooser.pro文件,在项目选项卡中选择添加构建套件,将我们刚刚设置好的添加进来,我这会儿选择的是系统自动生成的,因为小机器人的图标很好看!
可以看到这里多出了很多文件,那是在Eclipse中非常常见的文件,其实我也不懂。不过这不影响,还是和原来那样,点击小锤子构建,点击绿三角运行。这里运行的时候打开模拟器要花很长时间,界面会卡死一段时间,这时可以准备一杯咖啡啊。
打开了模拟器也不见得能够制作成apk包。因为如果JAVA_HOME变量和Ant路径设置不正确或者JDK版本混乱的话,一样无法顺利打包,所以前面的步骤需要引起注意。
制作成了apk包也不见得能够正确地运行,这很可能是Qt库的问题,看看项目选项卡,按照官网显示的步骤,需要这样设置:
这样才能在模拟器上运行。也可以安装Ministro包,关于真机调试以及部署方面这里我就没有再研究下去了。
好了,看看我们的成果吧。
屏幕太小了,换个大一点的屏幕!
如果大家有什么问题的话,可以留言给我,我会尽我所能帮大家解决的。
本文PDF下载见 http://pan.baidu.com/share/link?shareid=594633&uk=487907638
更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11