“Android VS Qt”:移動(dòng)開(kāi)發(fā)者眼里誰(shuí)更強(qiáng)?
譯文【2012年2月22日 51CTO外電頭條】本文將主要從開(kāi)發(fā)者的角度,對(duì)Android和Qt這兩大平臺(tái)作一個(gè)全方位的比較,希望對(duì)移動(dòng)開(kāi)發(fā)者有所幫助。
以下為全部譯文:
Android PK Qt:平臺(tái)概述
大多數(shù)Android應(yīng)用程序是用Java開(kāi)發(fā)的,它們?cè)贒alvik虛擬機(jī)里面運(yùn)行。不過(guò),Android僅僅借鑒了Java的語(yǔ)言語(yǔ)法,并不提供一套標(biāo)準(zhǔn)的應(yīng)用編程接口(API),比如Java SE和Java ME里面的標(biāo)準(zhǔn)API。像觸摸屏和存儲(chǔ)這些設(shè)備服務(wù)通過(guò)谷歌服務(wù)API來(lái)進(jìn)行訪問(wèn)。
請(qǐng)參閱51CTO專題:Android開(kāi)發(fā)應(yīng)用詳解
雖然Android操作系統(tǒng)基于Linux內(nèi)核,但它本身不是一款Linux操作系統(tǒng)。它既沒(méi)有原生的窗口系統(tǒng),也不支持諸如GNU C之類的標(biāo)準(zhǔn)Linux庫(kù)。要想運(yùn)行用C或其他語(yǔ)言編寫的應(yīng)用程序,必須編譯成原生代碼,這可以通過(guò)Android原生開(kāi)發(fā)工具包(Android NDK)來(lái)完成(欲知詳情,請(qǐng)參閱51CTO譯文)。
Qt則是一款跨平臺(tái)框架,面向Symbian、Maemo和MeeGo。雖然Qt為Python、Ruby和Perl等幾種編程語(yǔ)言提供了綁定機(jī)制,但是應(yīng)用程序主要是用C++來(lái)編寫的,并由額外的擴(kuò)展件來(lái)加以改進(jìn)。這些擴(kuò)展件由預(yù)處理程序來(lái)實(shí)現(xiàn),預(yù)處理程序在編譯之前生成標(biāo)準(zhǔn)的C++代碼。眾所周知,Qt框架易于使用,而且支持桌面端出色的圖形用戶界面(GUI)窗口組件。最近對(duì)移動(dòng)平臺(tái)的改進(jìn)、尤其是Qt Mobility和Qt Quick著實(shí)吸引人。憑借成熟強(qiáng)大的Qt Creator集成開(kāi)發(fā)環(huán)境(IDE),Qt框架在移動(dòng)應(yīng)用開(kāi)發(fā)領(lǐng)域找到了一席之地。
請(qǐng)參閱51CTO專題:Qt編程基礎(chǔ)入門
#p#
Android PK Qt:應(yīng)用程序組件和API
Android架構(gòu)的一個(gè)主要概念是組件復(fù)用(component reuse)。這樣便于發(fā)布活動(dòng)、服務(wù)和數(shù)據(jù),并與其他應(yīng)用程序共享活動(dòng)、服務(wù)和數(shù)據(jù)。Android有四個(gè)基本的組件,每個(gè)組件有著特定的目的?;贏ndroid開(kāi)發(fā)的軟件多少會(huì)用到下列應(yīng)用服務(wù)。
- Activity Manager:該服務(wù)控制著任何活動(dòng)的生命周期,包括活動(dòng)堆棧的管理?;顒?dòng)為用戶的交互提供了一種接口。這是Android應(yīng)用程序的基本構(gòu)建模塊,負(fù)責(zé)創(chuàng)建窗口。所有活動(dòng)都是android.app.Activity的子類,其中用戶界面的元素通過(guò)setContentView(View)來(lái)設(shè)定。視圖用于用戶界面的構(gòu)建。
- Services:Service組件在后臺(tái)運(yùn)行,基本上是為了執(zhí)行冗長(zhǎng)的操作或遠(yuǎn)程進(jìn)程。它們沒(méi)有用戶界面,作為android.app.Service的子類來(lái)實(shí)現(xiàn)。(51CTO視頻專題:Android組件-Service)
- Content Providers:這種組件充當(dāng)共享數(shù)據(jù)的存儲(chǔ)庫(kù),無(wú)論共享數(shù)據(jù)是文件系統(tǒng)、SQLite數(shù)據(jù)庫(kù)還是其他持久性存儲(chǔ)位置。Content providers作為android.content.ContentProvider的子類來(lái)實(shí)現(xiàn)。
- Broadcast Receivers:電池電量很少、屏幕被關(guān)閉時(shí),該組件充當(dāng)響應(yīng)系統(tǒng)廣播通知的角色。它作為android.content.BroadcastReceiver的子類來(lái)實(shí)現(xiàn)。
Android應(yīng)用程序始于Activity實(shí)例。這個(gè)代碼片段演示了基本理念。
- 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用不同的方式來(lái)處理Android針對(duì)活動(dòng)所作的處理。它使用了幾個(gè)組件,比如域類或狀態(tài)機(jī)來(lái)跟蹤組件狀態(tài)。如果使用之前版本的Qt,在創(chuàng)建用戶界面時(shí),你就得使用窗口組件,或者在QGraphicsView上構(gòu)建屏幕。結(jié)果是用戶體驗(yàn)很差勁,在觸摸屏手機(jī)上更是差勁。但是隨著Qt Mobility和Qt Quick的發(fā)布,用Qt移動(dòng)平臺(tái)來(lái)開(kāi)發(fā)應(yīng)用程序變得更切實(shí)際了。
Qt Mobillity API框架提供了一系列廣泛的功能和技術(shù),包括如下:
- Bearer Management:該API控制著系統(tǒng)的連接狀態(tài)、管理可用網(wǎng)絡(luò)連接以及使用***的可用連接。
- Contacts:該API讓客戶機(jī)能夠請(qǐng)求來(lái)自本地和遠(yuǎn)地的聯(lián)系人數(shù)據(jù)。
- Location:該API用于接收來(lái)自任意數(shù)據(jù)源的位置數(shù)據(jù)。
- Messaging:該API用于發(fā)送和接收多種類型的消息,如短信和電子郵件。
- Multimedia:該API有助于播放和錄制媒體,并管理媒體內(nèi)容的組合。
- Publish和Subscribe:該API用于共享應(yīng)用程序之間的上下文信息和讀取項(xiàng)目值、瀏覽項(xiàng)目值以及訂閱變更通知。
- Service Framework:該API用于發(fā)現(xiàn)任意服務(wù),并為任意服務(wù)創(chuàng)建實(shí)例。
- System Info:該API用于發(fā)現(xiàn)與系統(tǒng)有關(guān)的信息和能力。
Qt Quick為使用QML語(yǔ)言,以聲明式方式建立對(duì)象樹(shù)提供了一種機(jī)制。QtDeclarative C++模塊將QML與C++對(duì)象集成起來(lái)。開(kāi)發(fā)者可以構(gòu)建對(duì)智能手機(jī)及其他設(shè)備來(lái)說(shuō)很常見(jiàn)的流暢的用戶界面。查看該列表,即可看到Qt Quick的所有組件。
這個(gè)Qt Quick代碼片段讓你可以大致了解腳本是什么樣子:
- import Qt 4.7
- Rectangle {
- Width : 270
- Height : 170
- Text {
- anchors . horizontalCentre : parent . horizontalCenter
- anchors . verticalCenter : parent . verticalCenter
- text : "Hello World"
- }
- }
Qt移動(dòng)平臺(tái)的基本起始點(diǎn)是main方法。下面是一個(gè)基于窗口組件的移動(dòng)應(yīng)用程序的示例起始點(diǎn):
- #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:平臺(tái)的優(yōu)缺點(diǎn)
由于Android是一款手機(jī)開(kāi)發(fā)平臺(tái),其觸摸屏和攝像頭等API訪問(wèn)系統(tǒng)資源再自然不過(guò)了。而Qt則是一款跨平臺(tái)的應(yīng)用框架,它***面向桌面端,后來(lái)借助Qt Mobility包及其API擴(kuò)展到了移動(dòng)平臺(tái)。因而,Qt訪問(wèn)系統(tǒng)資源的機(jī)制大不一樣。表1顯示了Android的一些主要功能和Qt的對(duì)應(yīng)功能。
表1
Android |
Qt移動(dòng)平臺(tái) |
借助ContactsContract和CalendarContract等API,Android能夠管理個(gè)人信息(聯(lián)系人和日歷)。 |
Qt Mobility為個(gè)人信息管理提供了一套API,比如Contacts API、Organizer API和Versit API。 |
Android讓用戶可以訪問(wèn)用于監(jiān)控網(wǎng)絡(luò)類型和連接速度等基本電話信息的Telephony API,以及用于處理電話號(hào)碼串的實(shí)用工具。 |
Qt Mobility通過(guò)Bearer Management API,提供了與AndroidTelephony API對(duì)應(yīng)的API。 |
Android中的消息傳送通過(guò)Message API來(lái)訪問(wèn)。 |
Qt Mobility提供了自己的Messaging API。 |
用于視頻編碼的圖像捕獲設(shè)置、播放/停止預(yù)覽、拍取照片和檢索幀都可以通過(guò)CameraAPI來(lái)訪問(wèn)。 |
Qt Mobility提供了Multimedia API,以處理攝像頭硬件及其他添加的功能。 |
在Android中,開(kāi)發(fā)者可以通過(guò)XML描述文件或IDE中的布局設(shè)計(jì)器(如Eclipse)裝入應(yīng)用程序的用戶界面。 |
Qt for Symbian提供了設(shè)計(jì)應(yīng)用程序的兩種方法:Qt Creator中的Form Designer和Qt Quick的QML,用于布局設(shè)計(jì)。 |
Android基于Java和Dalvik虛擬機(jī),它們離不開(kāi)基于Linux的Android操作系統(tǒng)。 |
Qt主要基于C++,是一款跨平臺(tái)的應(yīng)用框架,離不開(kāi)Symbian、Maemo和Meego等操作系統(tǒng)。 |
Android應(yīng)用程序局限于Android平臺(tái),而該平臺(tái)主要是為智能手機(jī)、平板電腦其他手持設(shè)備而開(kāi)發(fā)的。 |
Qt是一種跨平臺(tái)框架,主要為桌面開(kāi)發(fā)而設(shè)計(jì),后來(lái)移植到了移動(dòng)平臺(tái)。一個(gè)合理設(shè)計(jì)的Qt應(yīng)用程序可以在Symbian、Maemo和Meego移動(dòng)設(shè)備上執(zhí)行,也可以在Windows、Linux和Mac OS桌面平臺(tái)上執(zhí)行,不需要任何大幅改動(dòng)。 |
結(jié)束語(yǔ)
對(duì)每一個(gè)開(kāi)發(fā)項(xiàng)目來(lái)說(shuō),歸根結(jié)底就看產(chǎn)品的高效性和適銷性。由于各大廠商開(kāi)始制造基于Android的智能手機(jī)、平板電腦、電子書閱讀器及其他手持設(shè)備,Android及其操作系統(tǒng)無(wú)疑證實(shí)了其適銷性。實(shí)際上,似乎是個(gè)劣勢(shì)的因素(Android應(yīng)用程序局限于Android平臺(tái))恰恰成了Android平臺(tái)的一大優(yōu)勢(shì)。
Android的開(kāi)放理念也確保了只要編寫擴(kuò)展件或替換件,就能消除用戶界面或原生應(yīng)用程序設(shè)計(jì)方面的任何缺陷。Android為你提供的工具可以開(kāi)發(fā)出外觀、感覺(jué)和功能與你設(shè)想的一模一樣的手機(jī)界面和應(yīng)用程序。不過(guò),Android開(kāi)發(fā)者的工作效率因速度緩慢的仿真器受到了阻礙。
另一方面,Qt通過(guò)Qt Creator IDE,提供了一種非常高效的開(kāi)發(fā)環(huán)境。由于Qt 不是為某一款操作系統(tǒng)而設(shè)計(jì),Qt應(yīng)用程序在智能手機(jī)領(lǐng)域的適銷性高度依賴Symbian、MeeGo和Maemo等操作系統(tǒng)。然而,Qt應(yīng)用程序可以移植到Android設(shè)備上,不過(guò)要獲得技術(shù)上的成熟性可能需要借以一段時(shí)日。
【51CTO譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請(qǐng)注明原文出處、作者及51CTO譯者!】