“Android VS Qt”:移動開發者眼里誰更強?
譯文【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譯者!】