让Qt应用程序跑在Android上

Qt最大的优势就是跨平台,一次性开发的Qt应用程序,可以跑Windows、跑linux、跑MAC……如今移动平台android操作系统如此火爆,Qt当然不能放过对android的支持,对了,还有iphone/ipad。而且,c++开发者们,想做android开发也不是问题了! 但是目前国内研究qt for android 的人真是太少了,今天我使用的是国外开发者社区分享的资源 :Necessitas

开发环境

Ubuntu 10.04 (sorry,qt for android暂不支持windows下开发)

sun-java6 (sorry,qt for android 1.5 会报错的,只能1.6)

necessitas 资源下载地址:点击跳转到资源下载地址

apache-ant-1.8.0以上版本 :这里提供1.8.2版本资源下载


操作步骤

安装好necessitas qt creator后,创建工程时,会发现多了一个Android选项,自然选择创建Android工程。然后会惊喜的发现,工程目录下多了android文件夹。这也是为什么qt应用程序可以成功的跑在android上的精髓所在,下篇文章再具体分析如何实现的Android的支持……


在Tools-->Options里配置一下android环境变量:

注意:别忘记add上 名为qtonandroid的AVD(模拟器)


然后就可以开始开发Qt应用程序,为了演示,我只是随便写了一点。然后直接点击运行(CTRL+R)。

倘若出现这个错误:

Starting remote process ...
Can't find eu.licentia.necessitas.industrius.example.Yiyaaixuexi process

解决方案是:

在run选项设置Android target SDK 为 android-8


倘若出现错误信息为:

Starting remote process ...
I/Qt JAVA ( 469): surfaceChanged: 480,762
D/dalvikvm( 469): Trying to load lib /data/data/eu.licentia.necessitas.ministro/files/qt/lib/libQtCore.so 0x44ede7e8
D/dalvikvm( 469): Added shared lib /data/data/eu.licentia.necessitas.ministro/files/qt/lib/libQtCore.so 0x44ede7e8
D/dalvikvm( 469): No JNI_OnLoad found in /data/data/eu.licentia.necessitas.ministro/files/qt/lib/libQtCore.so 0x44ede7e8, skipping init
D/dalvikvm( 469): Trying to load lib /data/data/eu.licentia.necessitas.ministro/files/qt/lib/libQtGui.so 0x44ede7e8
D/dalvikvm( 469): Added shared lib /data/data/eu.licentia.necessitas.ministro/files/qt/lib/libQtGui.so 0x44ede7e8
D/dalvikvm( 469): No JNI_OnLoad found in /data/data/eu.licentia.necessitas.ministro/files/qt/lib/libQtGui.so 0x44ede7e8, skipping init
D/dalvikvm( 469): Trying to load lib /data/data/eu.licentia.necessitas.ministro/files/qt/plugins/platforms/android/libandroid-8.so 0x44ede7e8
D/dalvikvm( 469): Added shared lib /data/data/eu.licentia.necessitas.ministro/files/qt/plugins/platforms/android/libandroid-8.so 0x44ede7e8
I/Qt ( 469): qt start
D/dalvikvm( 469): Trying to load lib /data/data/eu.licentia.necessitas.industrius.example.Yiyaaixuexi/lib/libYiyaaixuexi.so 0x44ede7e8
D/dalvikvm( 469): Added shared lib /data/data/eu.licentia.necessitas.industrius.example.Yiyaaixuexi/lib/libYiyaaixuexi.so 0x44ede7e8
I/Qt ( 469): qt start
W/ApplicationContext( 469): Unable to create files directory
D/AndroidRuntime( 469): Shutting down VM
W/dalvikvm( 469): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 469): FATAL EXCEPTION: main
E/AndroidRuntime( 469): java.lang.NullPointerException
E/AndroidRuntime( 469): at eu.licentia.necessitas.industrius.QtActivity.startApplication(QtActivity.java:126)
E/AndroidRuntime( 469): at eu.licentia.necessitas.industrius.QtActivity.access$000(QtActivity.java:62)
E/AndroidRuntime( 469): at eu.licentia.necessitas.industrius.QtActivity$1$1.run(QtActivity.java:149)
E/AndroidRuntime( 469): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 469): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 469): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 469): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 469): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 469): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 469): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 469): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 469): at dalvik.system.NativeStart.main(Native Method)
I/Process ( 469): Sending signal. PID: 469 SIG: 9

解决方案:

这种错误并不是环境配置的原因,而是Qt应用程序本身的设计不符合现有平台工具对android的支持。
比如:label上有中文字符等…… 改用英文字符就可以pass的。

如果你研究出了对中文字符支持的方案,欢迎交流下~~


顺利的话,编译通过后会自动弹出android模拟器,但是初次运行程序会遇到这个问题:



别担心,你可以自己去google market下载MinistroConfigurationTool-1.0.apk 和Ministro-2.0.apk ,

也可以直接下载我上传到csdn的资源:apk-1apk-2

adb install 推进安装这两个apk后,再次运行程序,会提示:





安装完成后,再疯狂的启动log之后,就会在模拟器上看到让我们欣喜的qt应用程序了~~哦不,现在是android应用程序了!

顺便提一句:qt应用程序其实被打包成了Yiyaaixuexi-debug.apk ,在工程目录下的android/bin/下。

下图是效果图:





下班了回家!欢迎交流哦~


转载 :http://blog.csdn.net/yiyaaixuexi/article/details/6885408

更多相关文章

  1. #菜鸟之旅#Android(安卓)Studio开发JNI工程——Native调用Java方
  2. [置顶] Android(安卓)NDK开发 Android(安卓)JNI项目创建
  3. Android开发实践:自定义带消息循环(Looper)的工作线程
  4. android 常用测试框架
  5. Android开发者已经度过了初级、中级,如何成为一个Android高手呢?
  6. android 开发提速
  7. Android的系统架构
  8. Android中级进阶 FAQ
  9. Android文档(一)——什么是Android?

随机推荐

  1. android内置和外置sdcard区别
  2. Android应用程序组件Content Provider在
  3. android 模拟器横竖切换
  4. Android 远程链接 daemon not running 解
  5. android > Android实现计时与倒计时的几
  6. android6.0创建文件问题
  7. Android 进化
  8. Android Jetpack Navigation 的使用
  9. 怎样使用android自带例子程序
  10. Android AudioRecord录音实现