《2022年Android平台Qt开发入门教程 .pdf》由会员分享,可在线阅读,更多相关《2022年Android平台Qt开发入门教程 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Android平台 Qt 开发入门教程很多人会问,Android平台可以不使用Java 开发应用程序?我做 Android平台 native开发之前,也有这么想过, 但是我又想,底层系统全是c/c+代码,用c/c+开发 Android平台程序是可能的,只是需要使用系统非公开的API( 就是android源代码,而非NDK 里面提供的头文件),比如 libui 和 skia 。好了,由于我的工作是把C+ 中间件移植到Android平台,所以会对Qt for android这个项目比较了解,毕竟国内做这些的还比较少,所以需要参考android-lighthouse如何解决的文字显示,图形,键盘,触
2、摸屏事件等等。言归正传,我们开始今天的教程: 在 Android平台开发Qt 应用程序。前提 :你的系统必须是linux ,或者 MAC OS X。在 windows平台使用cygwin开发会遇到问题。你首先需要下载android-ndk-r5或以上版本, android-sdk-r8或以上版本。然后下载好android-lighthouse, 这个就是android平台的 Qt 版本,国外个人移植的, nokia官方是不会发布这样的版本的。git 软件库地址:git:/gitorious.org/taipan/qt/android-lighthouse.git 名师资料总结 - - -精品资
3、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 当然你还可以下载整合了android平台的 qtcreator, 软件库地址:git:/gitorious.org/taipan/qt-creator/android-qt-creator.git 这样你可以直接在qtcreator里面开发测试android应用程序,这里有个视频介绍qtcreator开发 android应用程序 ( 被墙了,可以用VPN 或 proxy访问): http:/ ,输入 git
4、clone git:/gitorious.org/taipan/qt/android-lighthouse.git,便开始下载android-lighthouse的源码。下载好后,android-lighthouse目录结构如下图:下载 android-qtcreator, 在终端中输入git clone git:/gitorious.org/taipan/qt-creator/android-qt-creator.git,开始下载;如果你不想使用图形界面开发Qt 应用程序,你可以不用下载,下面是我通过打包下载的qtcreator 2.1 for android的文件目录结构,压缩包总共21M
5、. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - ariesuu3g:/wp/qt-creator-android-qt-creator$ ls dist HACKING LICENSE.LGPL qtcreator.pro scripts src doc LGPL_EXCEPTION.TXT qtcreator.pri README share tests 然后我们修改以下环境变量,开始编译android-lighthou
6、se: 1. androidconfigbuild.sh文件 , 把 ANDROID_NDK_ROOT, ANDROID_NDK_HOST, ANDROID_NDK_TOOLCHAIN_PREFIX等等这 5 个变量安装你下载的android-ndk进行修改,比如下面是我自己电脑上面设置的变量:export ANDROID_NDK_ROOT=/opt/android-ndk-r5 export ANDROID_NDK_HOST=linux-x86 export ANDROID_NDK_TOOLCHAIN_PREFIX=arm-linux-androideabi export ANDROID_N
7、DK_TOOLCHAIN_VERSION=4.4.3export ANDROID_NDK_PLATFORM=android-8 2. mkspecs/android-g+/qmake.conf文件,把NDK_ROOT, NDK_HOST,NDK_TOOLCHAIN_PREFIX, ANDROID_PLATFORM, NDK_TOOLCHAIN_VERSION按照你下载的android-ndk进行修改,比如我使用的是x86平台的 android-ndk-r5(非 64 位系统 ), 我修改后的mkspecs/android-g+/qmake.conf文件如下图所示:名师资料总结 - - -精品资
8、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 做好以上2 个文件的修改后,我们就开始编译android-lighthouse,注意androidconfigbuild.sh最后有一个make的指令, 你可以去掉他, 自己手动输入,或者现在修改,注意最好充分利用你的多核CPU,我 2 核的 CPU,我就make -j2了,如果你是4 核的,你最好make -j4,这样我想如果3GHz 的CPU,最多 1 个小时就可以编译好android-lighthous
9、e.修改好后,运行./androidconfigbuild.sh 然后就等待结果,如果你设置的是手动输入make, 你需要在config完成之后输入make自行编译。编译结束后,输入sudo mkdir /data/local/qt sudo make install 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - android-lighthouse默认会安装到/data/local/qt目录下。安装 qt 动态库 :手机:
10、首先确保你的手机有足够大的空间安装这些动态库(全部安装需要200M的空间),其中QtXml有 50M , QtGui有 90M ,QtCore有 20 多 M。这些都是带调试信息的动态库。(2011年 1 月 20 日注:其实不需要这么大的空间,strip过后的 library只需要 10 多 M 就可以了, 我原来拷贝的所有library是没有 strip过的 ) 模拟器:模拟器默认启动会把分区大小设置为64M ,这里是不够用的,我们需要手动设置分区大小,我这里设置为256M 。首先用android list列出你的AVD列表,如下图名师资料总结 - - -精品资料欢迎下载 - - - -
11、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - 然后使用emulator -avd -partition-size 指定分区大小并启动模拟器,如下所示,我启动的是android2.2, 分区大小为256M的 AVD: ariesuu3g:$ emulator -avd android2.2 -partition-size 256 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
12、第 6 页,共 14 页 - - - - - - - - - 在模拟器里面查看分区大小:这里我们使用模拟器来做例子,使用adb -e push把所有 Qt 库 push到模拟器中,你也可以使用android-lighthouse自带的脚本来完成这个任务,push_qt_libs.sh脚本内容如下 ( 注意修改你的push_qt_libs.sh里面的 strip工具路径 ) :#!/bin/sh adb shell rm -r /data/local/qt | exit 0 rm -fr al mkdir al cp -a lib/*.so* al/ 名师资料总结 - - -精品资料欢迎下载 -
13、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - /opt/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-strip -strip-unneeded al/* adb push al /data/local/qt/libadb push imports /data/local/qt/imports adb push plu
14、gins /data/local/qt/plugins 运行 Qt 应用程序:以上步凑结束后,我们还需要修改一些shell脚本才可以正常的工作,android-lighthouse main trunk里面的 shell 脚本有一些bug, 这里我们就动手开始改他 , 在 android-lighthouse根目录下面找到create_android_lighthouse_project.sh,打开,根据你android-ndk的版本路径 , 修改以下内容 : . # 修改以下2 行,指向你的android-sdk和 android-lighthouse源码路径SDK_ROOT=/home/b
15、uus/dev/android-sdk-linux_x86 LIGHTHOUSE_ROOT=/home/buus/dev/android-lighthouse . # 我的 android-sdk里面, adb 在 platform-tools 目录下面,所以修改为$SDK_ROOT/platform-tools/adb $SDK_ROOT/tools/adb install -r bin/$PROJECT_NAME-debug.apk 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
16、 8 页,共 14 页 - - - - - - - - - . # 同上$SDK_ROOT/tools/adb shell am start -n org.$PROJECT_NAME.qt/.QtMain . # 同上$SDK_ROOT/tools/adb install -r bin/$PROJECT_NAME-debug.apk 这些路径设置好后,我们再修改一些可能存在的bug, 把此脚本中的如下代码cp $LIGHTHOUSE_ROOT/examples/android/QtAnimatedtiles/AndroidManifest.xml $J_PRO/AndroidManifest.
17、xml cp -r $LIGHTHOUSE_ROOT/src/android/java/src/com $PROJECT_NAME-java/src sed -i s/animatedtiles/$PROJECT_NAME/g $J_PRO/AndroidManifest.xml cp $Q_PRO/lib$PROJECT_NAME.so* $J_PRO/libs/armeabi # 我们编译cpp代码时是生成可执行文件,不是生成动态库替换为cp $LIGHTHOUSE_ROOT/src/android/java/AndroidManifest.xml $J_PRO/AndroidManife
18、st.xml cp -r $LIGHTHOUSE_ROOT/src/android/java/src/* $PROJECT_NAME-java/src cp -r $LIGHTHOUSE_ROOT/src/android/java/res/* $PROJECT_NAME-java/res sed -i s/animatedtiles/$PROJECT_NAME/g $J_PRO/src/org/$PROJECT_NAME/qt/QtMain.java 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
19、- - - 第 9 页,共 14 页 - - - - - - - - - sed -i s/calculator/$PROJECT_NAME/g $J_PRO/src/com/nokia/qt/android/QtActivity.java sed -i s/example.name/$PROJECT_NAME.qt/g $J_PRO/AndroidManifest.xml sed -i s/Application name/$PROJECT_NAME/g $J_PRO/res/values/strings.xml cp $Q_PRO/$PROJECT_NAME $J_PRO/libs/arm
20、eabi/lib$PROJECT_NAME.so # 我们编译cpp 代码时是生成可执行文件,不是生成动态库,但这里必须以动态库的形式加载注意其中的几个sed, 你所需要替代的源对象可能和这里的不一样,请根据你的情况做适当修改。修改这些主要是由于example里面的代码没有及时更新,并且我们还需要res 里面的 libs.xml文件 ,然后保存,这里有一份我修改好的,针对2011年 1 月份的 trunk做的修改。attach694/attach 以上步凑结束后, 我们开始拷贝一个例子程序来开始我们的Qt for android之旅。拷贝 examples/widgets/calculator
21、整个目录到android-lighthouse根目录下面,然后使用create_android_lighthouse_project.sh创建此 c+ 代码对应的 java 代码 ,我们在终端里面运行./create_android_lighthouse_project.sh -n calculator 命令结束后,会在当前目录产生calculator-cpp和 calculator-java 2个目录,以及 build.sh, creatorbuild.sh, run.sh等工具脚本。这里需要注意,calculator-cpp目录下面的源代码是stub程序,就是什么事情都不做作的代码,我们需
22、要把这个目录下面的所有文件都删除掉,然后把calculator目录下面的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - 所有文件拷贝到calculator-cpp目录下,然后再运行(在这里你的模拟器必须启动,或者手机已经正确连接上电脑了): ./build.sh 我执行以上几个步凑后的终端:ariesuu3g:/wp/android-lighthouse$ rm calculator-cpp/* -rf ariesuu3g:
23、/wp/android-lighthouse$ cp calculator/* calculator-cpp/ ariesuu3g:/wp/android-lighthouse$ ./build.sh /opt/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g+ -c -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fpic -mthumb -ffunction-sections -f
24、unwind-tables -fstack-protector -fno-short-enums -DANDROID -D_ARM_ARCH_5_ -D_ARM_ARCH_5T_ -D_ARM_ARCH_5E_ -D_ARM_ARCH_5TE_ -DQT_NO_QWS_TRANSFORMED -I/wp/android-lighthouse/src/3rdparty/android/precompiled/android-8/arch-arm/include -Os -g -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -
25、Wall -W -D_REENTRANT -DQT_NO_CORESERVICES -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I./mkspecs/android-g+ -I. -I./include/QtCore -I./include/QtNetwork -I./include/QtGui -I./include -I.moc/release-shared -I/opt/android-ndk-r5/platforms/android-8/arch-arm/usr/include -I/op
26、t/android-ndk-r5/sources/cxx-stl/gnu-libstdc+/include -I/opt/android-ndk-r5/sources/cxx-stl/gnu-libstdc+/libs/armeabi/include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - -o .obj/release-shared/button.o button.cpp . -obfuscate: -dex: e
27、cho Converting compiled files and external libraries into /wp/android-lighthouse/calculator-java/bin/classes.dex. -package-resources: echo Packaging resources aapt Creating full resource package. -package-debug-sign: apkbuilder Creating calculator-debug-unaligned.apk and signing it with a debug key.
28、 debug: echo Running zip align on final apk. echo Debug Package: /wp/android-lighthouse/calculator-java/bin/calculator-debug.apk BUILD SUCCESSFUL Total time: 8 seconds 652 KB/s (304878 bytes in 0.456s) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - -
29、- - - - - - pkg: /data/local/tmp/calculator-debug.apk Success 到这里,我们就成功编译并安装好了Qt 版的 calculator了,把 logcat打开,我们试一试运行这个calculator,并看一看android log的输出,另起一个终端,里面输入adb logcat 由于 run.sh有 bug, 所以我们就不用这个脚本来启动calculator,打开 android模拟器或者手机的软件列表,找到名为calculator的应用程序,点击就可以运行了,如下图(左面终端里面是logcat输出的 log 信息 ):名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - 用鼠标点击下这个计算器试试效果如何。以后我们便可以按照以上步凑创建自己的Qt 应用程序了。作者 : Aries 米狗族名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -