找回密码
 立即注册
收起左侧

Qt安卓教程(3):[转] Qt安卓的一些原理

21
回复
21696
查看
[复制链接]

尚未签到

来源: 2013-10-30 11:23:56 显示全部楼层 |阅读模式
该文章原创于Qter开源社区(www.qter.org),作者Joey_Chan,转载请注明出处!


本系列教程主要讲述与安卓移植版Qt的相关内容,如平台特性、功能限制、特定用户体验和内容发布等,其余与Qt自身非平台相关的内容不会作详细讲述,笔者默认童鞋们已经有一定的Qt功底。
另:请自备安卓机子一台,不推荐用模拟器。

第三篇:[转] Qt安卓的一些原理(来自Necessitas创始人之一,Bogdan Vatra)

原文链接:http://www.kdab.com/qt-on-android-episode-1/#more-4283

原文英文很多,而且有一半是作者讲述Qt安卓的来历的,所以我这里就翻译一部分重点(以下的“我”,如无特别注释,均指Bogdan Vatra)

1. Qt安卓来历

    2009年,我以高级Linux工程师的身份在ROUTE66工作,并开始接触安卓的相关研究。年底诺基亚发布了“lighthouse”项目(译者注:就是现在的qpa,介于系统和Qt之间的兼容层),我开始尝试将Qt移植到安卓上。2010年,我开始开发creator的插件并于2011年发布了第一个版本的Necessitas,随后我加入了KDE,因为我和KDE的目标是一致的:将强大的Qt共享给大众。没多久,Ray Donnelly联系上我,并帮忙将Necessitas移植到了win和mac。

    2012年,Qt安卓正式加入Digia官方项目,我把我的Qt安卓移植都提交了上去。请注意,Qt5版本的安卓移植属于Digia,Qt4版本的安卓移植属于KDE和Necessitas。

2. Qt安卓是如何工作的

    Qt安卓基于lighthouse(现在的qpa),主要原因是Qt的even loop是不能直接连上安卓自身的even loop,所以目前java UI和Qt的even loop并不是运行在同一个线程下的,即使后来谷歌给NDK添加了NativeActivity,也还是无法将安卓所有的特性都能被Qt用到。

    Qt安卓项目主要由两大部分组成:
    1. native,其实就是Qt,包括程序和运行库;
    2. Java外壳,这个外壳包括了几个安卓需要的部分:
    --2.1 Android manifest,安卓程序的入口点,最基本的配置文件
    --2.2 两个Java类,一个是启动程序用的,另一个是连上Qt
    --2.3 Ministro (译者注,就是将Qt运行库外置的东东,现在可以不需要了)
    --2.4 资源,如图片,等等

    下面我讲述一下这些东西是如何共同工作的

    点开一个程序,系统先读取Android manifest以确定入口点,然后启动“activity”,这个activity先确定Qt运行库是否完整,然后就启动QPA插件。

    那main函数呢?麻烦的地方就在这里,因为我不想Qt开发者需要写另外一个main函数来启动Qt,所以我必须要找到一个方法来让Java调用这个main函数。
    在Java中调用C++的函数是需要先注册的,这里QPA就负责这项工作,当程序加载了QPA插件后,QPA就注册了几个主要的函数到Java中,其中就有main函数,接着Java就会建立另一个线程来启动main函数,如果不建立新的线程,这个main函数就会卡住Java的整个UI。

3. Qt安卓近期的路线图(Qt5.1到Qt5.3)
(译者注:看看5.2就好了,5.3作者自己也不确定)




PS:下一篇文章我会讲述如何使用JNI来调用(或被调用)安卓的功能  (译者注,这里的“我”还是Bogdan Vatra)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:55 天
连续签到:1 天
2013-10-30 14:35:01 显示全部楼层
sf,楼主兄给力啊我先学习了
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-10-30 16:37:40 显示全部楼层
这个不错,可以让大家有个整体的认识。
回复 支持 反对

使用道具 举报

尚未签到

2013-10-30 19:45:40 显示全部楼层
yafeilinux 发表于 2013-10-30 16:37
这个不错,可以让大家有个整体的认识。

对,这个相对权威很多
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-11-2 22:09:18 显示全部楼层
学习了。 谢谢楼主。
回复 支持 反对

使用道具 举报

累计签到:17 天
连续签到:1 天
2013-11-6 23:51:27 显示全部楼层
现在开发Android也要QML了,楼主能不能出个QML系列的教程?这方面的中文资料真的少。。。
回复 支持 反对

使用道具 举报

尚未签到

2013-11-7 10:40:37 显示全部楼层
jakes 发表于 2013-11-6 23:51
现在开发Android也要QML了,楼主能不能出个QML系列的教程?这方面的中文资料真的少。。。 ...

可以先学学QML 1.x版,站长yafei的教程里面有,也比较全面。

至于最新的QML 2.x版,不要说中文,连国外的都很少。不过据说yafei准备要出Qt5的教程,你可以问问他。

我是打算只做手机类的教程,QML内容太多了一时半时也弄不完,请见谅。
回复 支持 反对

使用道具 举报

累计签到:17 天
连续签到:1 天
2013-11-12 10:59:16 显示全部楼层
Joey_Chan 发表于 2013-11-7 10:40
可以先学学QML 1.x版,站长yafei的教程里面有,也比较全面。

至于最新的QML 2.x版,不要说中文,连国外 ...

嗯,有在看yafei的《实践》,QML讲的不错。不过不够详细,更多只能看文档和EXAMPLE了。英文少量还行,看多了吃不消。
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2013-11-13 17:10:15 显示全部楼层
我有个疑问,如何为安装后的APK应用程序替换图片,生成的APK只是小机器人的图标,安装后还是机器人的图标,这个如何替换呢?我试了添加rc文件,但是没成功。
回复 支持 反对

使用道具 举报

累计签到:32 天
连续签到:1 天
2013-11-14 23:35:22 显示全部楼层
谢谢楼主,挺有用的

我是刚接触QT,感觉楼主这个讲的挺具体的
回复 支持 反对

使用道具 举报

尚未签到

2013-11-15 00:44:53 显示全部楼层
nebulaLove 发表于 2013-11-14 23:35
谢谢楼主,挺有用的

我是刚接触QT,感觉楼主这个讲的挺具体的

过奖。。我翻译的而已
回复 支持 反对

使用道具 举报

尚未签到

2013-11-17 11:57:51 显示全部楼层
Yes, this topic is quite useful and we can check their LV iPhone 5S Case of different designs.
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2013-11-19 20:12:08 显示全部楼层
学习了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2013-11-19 20:13:33 显示全部楼层

楼主兄给力啊我先学习了
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2013-12-4 14:10:43 显示全部楼层
楼主太好了。好人一生平安!
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2013-12-5 20:36:24 显示全部楼层
我是来跟着楼主兄学习的、、、
回复 支持 反对

使用道具 举报

累计签到:79 天
连续签到:1 天
2013-12-17 10:55:28 显示全部楼层
学习了。感觉楼主这个讲的挺具体的
回复 支持 反对

使用道具 举报

尚未签到

2013-12-17 22:03:56 显示全部楼层
很好啊,挺有用的,学习一下
回复 支持 反对

使用道具 举报

尚未签到

2013-12-17 22:05:14 显示全部楼层
挺有用的,刚学,正好用上,谢谢
回复 支持 反对

使用道具 举报

尚未签到

2013-12-21 08:36:17 显示全部楼层

这个不错,可以让大家有个整体的认识
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了