【2012年2月22日 51CTO外电头条】本文将主要从开发者的角度,对Android和Qt这两大平台作一个全方位的比较,希望对移动开发者有所帮助。
以下为全部译文:
Android PK Qt:平台概述
大多数Android应用程序是用Java开发的,它们在Dalvik虚拟机里面运行。不过,Android仅仅借鉴了Java的语言语法,并不提供一套标准的应用编程接口(API),比如Java SE和Java ME里面的标准API。像触摸屏和存储这些设备服务通过谷歌服务API来进行访问。
请参阅51CTO专题:Android开发应用详解
虽然Android操作系统基于Linux内核,但它本身不是一款Linux操作系统。它既没有原生的窗口系统,也不支持诸如GNU C之类的标准Linux库。要想运行用C或其他语言编写的应用程序,必须编译成原生代码,这可以通过Android原生开发工具包(Android NDK)来完成(欲知详情,请参阅51CTO译文)。
Qt则是一款跨平台框架,面向Symbian、Maemo和MeeGo。虽然Qt为Python、Ruby和Perl等几种编程语言提供了绑定机制,但是应用程序主要是用C++来编写的,并由额外的扩展件来加以改进。这些扩展件由预处理程序来实现,预处理程序在编译之前生成标准的C++代码。众所周知,Qt框架易于使用,而且支持桌面端出色的图形用户界面(GUI)窗口组件。最近对移动平台的改进、尤其是Qt Mobility和Qt Quick着实吸引人。凭借成熟强大的Qt Creator集成开发环境(IDE),Qt框架在移动应用开发领域找到了一席之地。
请参阅51CTO专题:Qt编程基础入门
#p#
Android PK Qt:应用程序组件和API
Android架构的一个主要概念是组件复用(component reuse)。这样便于发布活动、服务和数据,并与其他应用程序共享活动、服务和数据。Android有四个基本的组件,每个组件有着特定的目的。基于Android开发的软件多少会用到下列应用服务。
- Activity Manager:该服务控制着任何活动的生命周期,包括活动堆栈的管理。活动为用户的交互提供了一种接口。这是Android应用程序的基本构建模块,负责创建窗口。所有活动都是android.app.Activity的子类,其中用户界面的元素通过setContentView(View)来设定。视图用于用户界面的构建。
- Services:Service组件在后台运行,基本上是为了执行冗长的操作或远程进程。它们没有用户界面,作为android.app.Service的子类来实现。(51CTO视频专题:Android组件-Service)
- Content Providers:这种组件充当共享数据的存储库,无论共享数据是文件系统、SQLite数据库还是其他持久性存储位置。Content providers作为android.content.ContentProvider的子类来实现。
- Broadcast Receivers:电池电量很少、屏幕被关闭时,该组件充当响应系统广播通知的角色。它作为android.content.BroadcastReceiver的子类来实现。
Android应用程序始于Activity实例。这个代码片段演示了基本理念。
- package org.mypackage.mynamespace;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class Androidproj2Activity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView textView=new TextView(this);
- textView.setText("Hello World");
- setContentView(textView);
- }
- }
Qt用不同的方式来处理Android针对活动所作的处理。它使用了几个组件,比如域类或状态机来跟踪组件状态。如果使用之前版本的Qt,在创建用户界面时,你就得使用窗口组件,或者在QGraphicsView上构建屏幕。结果是用户体验很差劲,在触摸屏手机上更是差劲。但是随着Qt Mobility和Qt Quick的发布,用Qt移动平台来开发应用程序变得更切实际了。
Qt Mobillity API框架提供了一系列广泛的功能和技术,包括如下:
- Bearer Management:该API控制着系统的连接状态、管理可用网络连接以及使用***的可用连接。
- Contacts:该API让客户机能够请求来自本地和远地的联系人数据。
- Location:该API用于接收来自任意数据源的位置数据。
- Messaging:该API用于发送和接收多种类型的消息,如短信和电子邮件。
- Multimedia:该API有助于播放和录制媒体,并管理媒体内容的组合。
- Publish和Subscribe:该API用于共享应用程序之间的上下文信息和读取项目值、浏览项目值以及订阅变更通知。
- Service Framework:该API用于发现任意服务,并为任意服务创建实例。
- System Info:该API用于发现与系统有关的信息和能力。
Qt Quick为使用QML语言,以声明式方式建立对象树提供了一种机制。QtDeclarative C++模块将QML与C++对象集成起来。开发者可以构建对智能手机及其他设备来说很常见的流畅的用户界面。查看该列表,即可看到Qt Quick的所有组件。
这个Qt Quick代码片段让你可以大致了解脚本是什么样子:
- import Qt 4.7
- Rectangle {
- Width : 270
- Height : 170
- Text {
- anchors . horizontalCentre : parent . horizontalCenter
- anchors . verticalCenter : parent . verticalCenter
- text : "Hello World"
- }
- }
Qt移动平台的基本起始点是main方法。下面是一个基于窗口组件的移动应用程序的示例起始点:
- #include "mainwindow.h"
- #include <QtGui/QApplication>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- MainWindow mainWindow;
- mainWindow.setOrientation(MainWindow::ScreenOrientationAuto);
- mainWindow.showExpanded();
- return app.exec();
- }
#p#
Android PK Qt:平台的优缺点
由于Android是一款手机开发平台,其触摸屏和摄像头等API访问系统资源再自然不过了。而Qt则是一款跨平台的应用框架,它***面向桌面端,后来借助Qt Mobility包及其API扩展到了移动平台。因而,Qt访问系统资源的机制大不一样。表1显示了Android的一些主要功能和Qt的对应功能。
表1
Android |
Qt移动平台 |
借助ContactsContract和CalendarContract等API,Android能够管理个人信息(联系人和日历)。 |
Qt Mobility为个人信息管理提供了一套API,比如Contacts API、Organizer API和Versit API。 |
Android让用户可以访问用于监控网络类型和连接速度等基本电话信息的Telephony API,以及用于处理电话号码串的实用工具。 |
Qt Mobility通过Bearer Management API,提供了与AndroidTelephony API对应的API。 |
Android中的消息传送通过Message API来访问。 |
Qt Mobility提供了自己的Messaging API。 |
用于视频编码的图像捕获设置、播放/停止预览、拍取照片和检索帧都可以通过CameraAPI来访问。 |
Qt Mobility提供了Multimedia API,以处理摄像头硬件及其他添加的功能。 |
在Android中,开发者可以通过XML描述文件或IDE中的布局设计器(如Eclipse)装入应用程序的用户界面。 |
Qt for Symbian提供了设计应用程序的两种方法:Qt Creator中的Form Designer和Qt Quick的QML,用于布局设计。 |
Android基于Java和Dalvik虚拟机,它们离不开基于Linux的Android操作系统。 |
Qt主要基于C++,是一款跨平台的应用框架,离不开Symbian、Maemo和Meego等操作系统。 |
Android应用程序局限于Android平台,而该平台主要是为智能手机、平板电脑其他手持设备而开发的。 |
Qt是一种跨平台框架,主要为桌面开发而设计,后来移植到了移动平台。一个合理设计的Qt应用程序可以在Symbian、Maemo和Meego移动设备上执行,也可以在Windows、Linux和Mac OS桌面平台上执行,不需要任何大幅改动。 |
结束语
对每一个开发项目来说,归根结底就看产品的高效性和适销性。由于各大厂商开始制造基于Android的智能手机、平板电脑、电子书阅读器及其他手持设备,Android及其操作系统无疑证实了其适销性。实际上,似乎是个劣势的因素(Android应用程序局限于Android平台)恰恰成了Android平台的一大优势。
Android的开放理念也确保了只要编写扩展件或替换件,就能消除用户界面或原生应用程序设计方面的任何缺陷。Android为你提供的工具可以开发出外观、感觉和功能与你设想的一模一样的手机界面和应用程序。不过,Android开发者的工作效率因速度缓慢的仿真器受到了阻碍。
另一方面,Qt通过Qt Creator IDE,提供了一种非常高效的开发环境。由于Qt 不是为某一款操作系统而设计,Qt应用程序在智能手机领域的适销性高度依赖Symbian、MeeGo和Maemo等操作系统。然而,Qt应用程序可以移植到Android设备上,不过要获得技术上的成熟性可能需要借以一段时日。
【51CTO译稿,非经授权谢绝转载,合作媒体转载请注明原文出处、作者及51CTO译者!】