随着RIM对开源项目的支持力度不断加大,越来越多的开源项目可以在PlayBook NDK环境中使用,继Cocos2dx之后让我们来看看如何在PlayBook NDK 2.0环境中使用Qt。
首先有一点遗憾的是目前测试成功的都是在Ubuntu环境中,所以本文也是讲述Ubuntu的PlayBook NDK 环境中如何配置使用Qt,需要大家也准备Ubuntu环境,如果对Ubuntu环境不熟悉,或者不习惯使用Ubuntu环境,就只能等后续的文章了。
和以前相同,有关Ubuntu的安装就略过,大家参考其它资料。在我的测试环境中使用的是VMWare虚拟机,同时PlayBook模拟器也是安装在VMWare虚拟中,两个虚拟机都使用NAT方式的网络配置,这样当环境搭建好以后Ubuntu上的PlayBook NDK环境就可以连接PlayBook模拟器进行调试了。
准备好Ubuntu环境后就需要在Ubuntu环境中安装PlayBook NDK 2.0环境,BlackBerry官网上可以直接下载Ubuntu上的PlayBook NDK 2.0 beta3安装程序,下载链接如下:
https://bdsc.webapps.blackberry.com/native/beta/download
在“Native SDK for tablet os”下载按钮下面有“other systems”字样,点击可以选择“Linux”平台,然后开始下载,我下载的文件是
installer-bbndk-2.0.0-beta3-linux-7109-201201122052-201201122215.bin
如果你是在Windows环境中下载的,下载后将文件拷贝到Ubuntu环境中。然后打开terminal窗口,进入下载文件所在的目录,先执行chmod命令修改下载文件的权限,我直接给了所有权限,命令如下:
chmod 777 installer-bbndk-2.0.0-beta3-linux-7109-201201122052-201201122215.bin
修改权限后就可以直接执行该bin文件,执行后会出现图形安装界面,后面的安装过程就和Windows环境差不多了,就是目录名有点差别。
安装好以后随便新建一个PlayBook项目测试一下,项目创建,编译的过程请参考我之前的文章,做这一步的目的是检验PlayBook NDK环境安装是否正确,能否连接PlayBook模拟器进行测试。
确定NDK环境安装成功后开始下载Qt包,下载过程是通过git工具从github网站下载,命令格式如下:
git clone git://github.com/blackberry/Qt.git
如果你的Ubuntu没有安装git的话系统会提示你安装git,提示时会给出安装命令,按照命令执行就可以了,安装完了以后再次执行git clone...命令下载Qt包。
执行git命名时最好创建一个专门的目录,如qt,然后进入该目录执行。执行过程会花一段时间,因为需要从github服务器下载Qt包。
执行成功的话该目录会出现一个名为Qt的目录,通过命令cd Qt进入该目录
然后在该目录执行source命令,后面跟随NDK安装目录下的bbndk-env.sh文件名,我的bbndk是安装在/damon/bbndk20上,所以我执行的命令是:
source /damon/bbndk20/bbndk-env.sh
执行后再运行命令./configure-qsk x86,之所以使用参数x86是因为我们的PlayBook模拟器使用的是x86架构的cpu。命令如下:
./configure-qsk x86
执行时会出现很多命令行输出,最后提示配置成功,这时就可以执行make命令对Qt的库进行编译了,命令如下:
$ make
编译过程同样需要花一段时间
编译完成后通过make instlall命令进行安装,命令如下:
make install
安装命令执行后对应的目录就应该出现Qt的so文件了,可以直接去目录检查一下。
安装完了以后启动NDK环境,新建一个BlackBerry tablet OS c/C++项目,在项目新建向导中给项目起个名字,然后选择编程语言是C++,在下面的选择框中选择“Application-Empty Application ”以创建一个新项目,接着在下一页中选择“Simulator-Debug”为激活配置,最后点击“Finish”完成项目创建。
项目创建后需要修改项目的bar-descriptor.xml文档,双击打开该文档,会出现专门的编辑界面,在Assets页面的Build Configuration一栏中选择Simulator-Debug ,然后在下方点击“Add Files”按钮,接着点击“File System”按钮,将Qt/stage/nto/x86/usr/lib/qt4/lib目录下的三个文件libQTCore.so.4.8.0,libQtGui.so.4.8.0和libQtOpenGL.so.4.8.0依次添加进来,再将/Qt/stage/nto/x86/usr/lib/qt4/plugins/platforms/libblackberry.so 文件添加进来。
添加了Assets页面的内容后需要手工修改一下bar-descriptor.xml,点击bar-descriptor.xml编辑器的“Source”标签进入源代码编辑状态,将下面这行修改一下:
<asset path="/qt-x86-lib/Qt/stage/nto/x86/usr/lib/qt4/plugins/platforms/libblackberry.so" type="Qnx/Elf">lib/libblackberry.so</asset>
修改成:
<asset path="/qt-x86-lib/Qt/stage/nto/x86/usr/lib/qt4/plugins/platforms/libblackberry.so" type="Qnx/Elf">lib/platforms/libblackberry.so</asset>
注意是将“lib/libblackberry.so”改成了“lib/platforms/libblackberry.so”
然后保存退出。
修改了bar-descriptor.xml后就开始创建程序的源代码文件了,在src目录下新建一个c++源文件,命名为main.cpp
然后将下面的代码拷贝进去,有关QT编程的细节在这里就不详细讲解了,有空在其他博文中再介绍
#include <QApplication> #include <QPushButton> #include <QWidget> int main(int argc, char *argv[]) { QCoreApplication::addLibraryPath("app/native/lib"); QApplication app(argc, argv); QWidget window; window.resize(1024, 600); QPushButton quit("Quit", &window); quit.setGeometry(422, 100, 180, 40); QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); window.show(); return app.exec(); }
创建了main.cpp后就需要修改项目的配置,包括一些编译参数和一些链接参数。
在NDK环境中对上面创建好的QT项目点击右键,选择“project properties”打开项目配置页面。
选择c/c++ build -> settings -> QCC Complier -> Preprocessor
在Include Directories(-l)一栏中添加如下目录
<你的Qt目录>/Qt/stage/nto/usr/include/qt4
<你的Qt目录>/Qt/stage/nto/usr/include/qt4/QtGui
<你的Qt目录>/Qt/stage/nto/usr/include/qt4/QtCore
在Defines(-D)一栏中添加如下内容:
QT_BOOTSTRAPPED
完成后的结果如下:
修改了编译选项后修改链接选项,同样在项目配置界面,选择
c/c++ build -> settings -> QCC Linker -> Preprocessor->Libraries
在Library Paths (-L)一栏中添加如下内容
<你的QT目录>/Qt/stage/nto/x86/usr/lib/qt4/lib
在Libraries (-l)一栏中添加如下内容:
QtCore
QtGui
QtOpenGL
添加完成后结果如下:
完成以上配置后其实就可以尝试编译运行这个Qt应用了,不过编译成功后运行时会报找不到plug-in的错误,因为没有指定Plug-in参数,可以直接在运行配置中添加参数。
右键点击项目,选择“Run As -> Run configurations -> Arguments”,在里面添加如下内容:
-platform blackberry
添加了以上参数后就可以测试该应用了,不过运行会出现闪退的现象,控制台报QFontDatabase的错,错误信息如下:
QFontDatabase: Cannot find font directory ... - is Qt installed correctly?
这时需要在bar-descriptor.xml文件中添加一行font目录的配置,加到最后一行</qnx>的前面,内容如下:
<env var="QT_QPA_FONTDIR" value="/usr/fonts/font_repository/liberation" />
</qnx>
完成以上修改后编译运行该项目,就可以在模拟器中看到Qt应用运行的结果了,截图如下: