qt编写安卓程序,qt编译android
很多人会问,Android平台可以不用Java开发应用吗?
在开发android平台原生之前,我也是这么想的,但我也认为底层系统充满了c/c代码,所以用c/c开发Android平台程序是可能的,但只需要使用系统的非公开API(即Android源代码,而不是NDK提供的头文件),比如libui和skia。
好的,因为我的工作是将C中间件移植到android平台,所以我会对Android的Qt有更多的了解。毕竟国内做这个的公司还是比较少的,所以我需要参考一下android-lighthouse是如何解决文字显示、图形、键盘、触摸屏事件等等问题的。
不管怎样,还是开始今天的教程吧:在Android平台上开发Qt应用。
前提:
你的系统必须是linux,或者Mac OS X,在windows平台上用cygwin开发会有一些问题。
首先你需要下载android-ndk-r5以上版本和android-sdk-r8以上版本。
然后下载android-lighthouse,这是android平台的Qt版本。是国外个人移植过来的,诺基亚官方不会发布这样的版本。git软件库地址:git://gitorious . org/~ taipan/Qt/Android-light house . git
当然,你也可以下载集成了android平台的qtcreator。软件库的地址是git://gitorious . org/~ taipan/Qt-creator/android-Qt-creator . git这样你就可以直接在qtcreator中开发和测试Android应用了。下面是一个关于qtcreator开发android应用的视频(已屏蔽,可通过VPN或代理访问):http://www.youtube.com/watch? v=VU _ zpnqrm 6 e
下载并编译android-lighthouse:
打开终端,输入 git clone git://gitorious . org/~ taipan/Qt/android-lighthouse . git 开始下载Android-light house的源代码。下载后,android-lighthouse的目录结构如下:
下载android-qtcreator,在终端输入 git clone git://gitorious . org/~ taipan/Qt-creator/Android-Qt-creator . git 开始下载;如果不想用图形界面开发Qt应用,就不需要下载了。下面是我打包下载的android版qtcreator 2.1的文件目录结构。压缩包一共21M。
Aries @ uu3g:/WP/Qt-creator-Android-Qt-creator $ ls
distHACKING许可证。LGPL Qt creator . proscriptsrc
LGPL博士例外。TXTqtcreator.priREADME共享测试
1.androidconfigbuild.sh文件,将Android _ ndk _ root、Android _ ndk _ host、Android _ ndk _ Toolchain _ prefix等五个变量安装到你下载的android-ndk中进行修改。例如,下面是在我自己的计算机上设置的变量:
导出ANDROID _ NDK _ ROOT=/opt/ANDROID-ndk-r5
导出安卓_ NDK _主机=linux-x86
导出安卓_ NDK _工具链_前缀=arm-Linux-安卓系统
导出安卓_ NDK _工具链_版本=4.4.3
导出安卓_ NDK _平台=安卓-8
2.mkspecs/android-g /qmake.conf文件,根据你下载的android-ndk修改ndk _ root,ndk _ host,ndk _ toolchain _ prefix,android _ platform,ndk _ toolchain _ version,比如我用的是x86平台的android-ndk-r5(不是64位系统)。我修改后的mkspecs/android-g /qmake.conf文件如下图所示:
修改完以上2个文件,我们就开始编译android-lighthouse。注意,androidconfigbuild.sh在末尾有一个make命令。您可以删除它并自己手动输入,或者现在修改它。注意,最好是充分利用你的多核CPU,我的2核CPU,我会做-j2。如果是4核的话,最好做-j4,所以我觉得android-lighthouse用一个3GHz的CPU最多一个小时就能编译好。修改后,运行它。
然后等待结果。如果设置为手动输入make,则需要在配置完成后输入make自行编译。
编译后,输入
sudo mkdir /data/local/qt
sudo make安装
Android-lighthouse会默认安装在/data/local/qt目录下。
安装qt动态库:
手机:首先确保你的手机有足够的空间安装这些动态库(所有安装都需要200M),其中QtXml 50M,Qt GUI 90M,Qt core 20m以上。这些是带有调试信息的动态库。(2011年1月20日注:其实不需要这么大的空间。剥离后的库只需要10 m多,我原来复制的库都没被剥离。)
模拟器:模拟器默认启动会将分区大小设置为64M,这里不够。我们需要手动设置分区大小,我在这里设置为256M。首先用android list列出你的AVD,如下图。
然后用emulator-AVD AVD _ name-partition-size size _ in _ megabyte指定分区大小,启动模拟器,如下图。我启动了android2.2,AVD,分区大小256M:
Aries @ UU3G:~ $ emulator-AVD Android 2.2-partition-size 256查看模拟器中的分区大小:
这里,我们以模拟器为例。我们使用adb -e push将所有Qt库推送到模拟器中。您也可以使用android-lighthouse附带的脚本来完成这项任务。push_qt_libs.sh脚本的内容如下(请在您的push_qt_libs.sh中修改剥离工具的路径):
#!/bin/sh
adb shell rm -r /data/local/qt 出口0
rm -fr al
mkdir al
cp -a lib/*。所以* al/
/opt/Android-ndk-r5/tool chains/arm-Linux-androidea bi-4 . 4 . 3/预构建/Linux-x86/bin/arm-Linux-androidea bi-strip-strip-needless al/*
adb推送al /data/local/qt/lib
亚行推动进口/数据/本地/Qt/进口
adb推送插件/数据/本地/Qt/插件
运行Qt应用程序:
以上步骤完成后,我们还需要修改一些shell脚本才能正常工作。android-lighthouse主干中的shell脚本存在一些bug。在这里,我们将开始改变它。在android-lighthouse的根目录下找到create _ Android _ light house _ project . sh,打开,根据你的android-ndk的版本路径修改以下内容:
.
#修改下面两行代码,指向您的android-sdk和android-lighthouse源代码路径。
SDK _ ROOT=/home/buus/dev/Android-SDK-Linux _ x86
light house _ ROOT=/home/buus/dev/Android-light house
.
#在我的android-sdk中,adb在platform-tools目录下,所以修改为$SDK_ROOT/platform-tools/adb。
\ $ SDK _ ROOT/tools/ADB install-r bin/\ $ PROJECT _ NAME-debug . apk
.
#同上
\ $ SDK _ ROOT/tools/ADB shell am start-n org。\$PROJECT_NAME.qt/。QtMain
.
#同上
\ $ SDK _ ROOT/tools/ADB install-r bin/\ $ PROJECT _ NAME-debug . apk
设置这些路径后,我们将修改一些可能的错误,并将以下代码放入该脚本中
CP $ light house _ ROOT/examples/Android/QtAnimatedtiles/Android manifest . XML $ J _ PRO/Android manifest . XML
CP-r $ light house _ ROOT/src/Android/Java/src/com $ PROJECT _ NAME-Java/src
sed-I s/animated tiles/$ PROJECT _ NAME/g $ J _ PRO/Android manifest . XML
CP \ $ q _ pro/lib \ $ project _ name . so * \ $ j _ pro/libs/arme ABI #我们编译cpp代码时,生成的是可执行文件,而不是动态库。
用…替换
CP $ light house _ ROOT/src/Android/Java/Android manifest . XML $ J _ PRO/Android manifest . XML
CP-r $ light house _ ROOT/src/Android/Java/src/* $ PROJECT _ NAME-Java/src
CP-r $ light house _ ROOT/src/Android/Java/RES/* $ PROJECT _ NAME-Java/RES
sed-I s/animated tiles/$ PROJECT _ NAME/g $ J _ PRO/src/org/$ PROJECT _ NAME/Qt/Qt main . Java
sed-I s/calculator/$ PROJECT _ NAME/g $ J _ PRO/src/com/Nokia/Qt/Android/Qt activity . Java
sed-I s/example . name/$ PROJECT _ name . Qt/g $ J _ PRO/Android manifest . XML
sed-I s/Application NAME/$ PROJECT _ NAME/g $ J _ PRO/RES/values/strings . XML
CP \ $ q _ pro/\ $ project _ name \ $ j _ pro/libs/arme ABI/lib \ $ project _ name . so #我们编译cpp代码的时候,生成的是可执行文件,不是动态库,但是这里必须是作为动态库加载的。
注意一些‘sed’。您需要替换的源对象可能与这里的不同。请根据你的情况做适当的修改。
这些修改主要是因为example中的代码没有及时更新,我们还需要res中的libs.xml文件,然后保存。这是我在2011年1月为trunk修改的版本。
[附加]694[/附加]
以上步凑结束后,我们开始拷贝一个例子程序来开始我们的安卓版夸脱之旅。拷贝示例/小部件/计算器整个目录到安卓-灯塔根目录下面,然后使用create _ Android _ light house _ project。嘘创建此c代码对应的爪哇岛代码,我们在终端里面运行
命令结束后,会在当前目录产生计算器-cpp和计算器-java 2个目录,以及build.sh,creatorbuild.sh,run.sh等工具脚本。这里需要注意,计算器-cpp目录下面的源代码是烟蒂程序,就是什么事情都不做作的代码,我们需要把这个目录下面的所有文件都删除掉,然后把计算器目录下面的所有文件拷贝到计算器-cpp目录下,然后再运行(在这里你的模拟器必须启动,或者手机已经正确连接上电脑了):
Aries @ uu3g:/WP/Android-light house $ RM计算器-CPP/*-射频
Aries @ uu3g:/WP/Android-light house $ CP calculator/* calculator-CPP/
Aries @ uu3g:/WP/Android-light house $ 1000。/build.sh
/opt/Android-ndk-r5/tool chains/ARM-Linux-Android idea bi-4。4 .3/pre build/Linux-x86/bin/ARM-Linux-andro idea bi-g-c-Wno-PS ABI-March=ARM V5 te-mtune=xscale-msoft-float-fpic-mt humb-ff函数-sections-fun wind-tables-f stack-protector-fno-short-enums-DANDROID-D _ _ ARM _ ARCH _ 5 _ _-D _ _ ARM _ ARCH _ 5T./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/opt/Android-ndk-r5/sources/cxx-STL/GNU-libstdc/opt/Android-ndk-r5/sources/cxx-STL/GNU-libstdc/libs/armea bi/include-o . obj/release-shared/button。o按钮。卡片打印处理机(Card Print Processor的缩写)
.
-混淆:
-德克斯:
[回声]将编译后的文件和外部库转换成/WP/Android-灯塔/计算器-Java/bin/classes。DEXEDRINE的简称.
-包-资源:
[回声]包装资源
[aapt]创建完整的资源包.
-打包-调试-签名:
[apkbuilder]创建计算器-调试-未对齐. apk并用调试密钥对其签名.
调试:
[回声]在最终应用上运行邮政编码对齐.
[回声]调试包:/WP/Android-灯塔/计算器-Java/bin/计算器-debug.apk
构建成功
总时间:8秒
652 KB/秒(0.456秒内304878字节)
pkg:/data/local/tmp/calculator-debug应用
成功到这里,我们就成功编译并安装好了夸脱版的计算器了,把日志工具打开,我们试一试运行这个计算器,并看一看机器人日志的输出,另起一个终端,里面输入
由于run.sh有bug,所以我们就不用这个脚本来启动计算器,打开机器人模拟器或者手机的软件列表,找到名为计算器的应用程序,点击就可以运行了,如下图(左面终端里面是日志工具输出的原木信息):
用鼠标点击下这个计算器试试效果如何。
以后我们便可以按照以上步凑创建自己的夸脱应用程序了。
作者:白羊座@米狗族
网站:http://www。悟空。com/thread-1199-1-1超文本标记语言
欢迎转载,转载请保留以上信息。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。