自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

向Qt 移植Android(Java)應(yīng)用

移動開發(fā)
作為開放手持設(shè)備聯(lián)盟和Google發(fā)起的項目,Android 已發(fā)展成針對移動電話的首個開放性免費平臺。Android平臺的重要性之一就是:手機廠商和無線運營商能為其產(chǎn)品和服務(wù)提供合適的Android版本。

本文講解的內(nèi)容是向Qt 移植Android(Java)應(yīng)用,隨著智能手機的廣泛應(yīng)用,不少智能機友玩轉(zhuǎn)不了,當(dāng)然這話和編程沒什么關(guān)系,但也表明了我們編程人員的水平。作為編程者,不外乎做些代碼的事情。如果你對本文感興趣的話,就來看看本文吧。

簡介

作為開放手持設(shè)備聯(lián)盟和Google發(fā)起的項目,Android 已發(fā)展成針對移動電話的***開放性免費平臺。該項目自2007年11月5日啟動,當(dāng)時Google、英特爾、T-Mobile、Sprint、宏達國際、高通和摩托羅拉等決定要實現(xiàn)一個雄偉目標(biāo):提供各種服務(wù),讓消費用戶享有極為優(yōu)秀的用戶體驗。

Android平臺的重要性之一就是:手機廠商和無線運營商能為其產(chǎn)品和服務(wù)提供合適的Android版本。該特性將對成本降低及產(chǎn)品創(chuàng)新產(chǎn)生直接影響。于是, Android就被視為智能手機移動平臺中的嶄新而具潛力的選擇。

向Qt 移植Android(Java)應(yīng)用 

向Qt 移植Android(Java)應(yīng)用

另一方面, Qt已被視為***移動編程世界中功能強大的組件。Qt在桌面系統(tǒng)中的使用最為令人矚目,如KDE、Opera、Skype和VirtualBox,但是最近它被移植到了諾基亞移動平臺,如S60和maemo。自1991年由Trolltech發(fā)布,Qt以兩種不同的許可證(開源許可證和商業(yè)許可證)發(fā)行,這使Qt更適合非GPL的開源項目,同時也適合商業(yè)用戶。2008年6月諾基亞收購了Trolltech,目的是加速移動終端和桌面應(yīng)用的跨平臺軟件戰(zhàn)略的實施。2008年9月29日,諾基亞將Trolltech改名為Qt。

本文提供的信息指引大家在開發(fā)中將Android應(yīng)用移植到Qt for Symbian。

Android平臺概述

Android應(yīng)用使用Java編程語言(Dalvik虛擬機)開發(fā),而諸如觸摸屏和各種存儲功能等終端服務(wù)則可通過Google services API訪問。用C或其它任何語言所編寫的應(yīng)用也有可能運行,不過需要先將這些應(yīng)用編譯成本地代碼后才行,然而這種開發(fā)路徑并不獲Google的正式支持。

自2008年10月起Android已作為開源項目(使用Apache許可證)供大家使用。此后,手機生產(chǎn)商和無線運營商可以自由地向其產(chǎn)品中添加各種封閉性的和專屬性的擴展。

盡管Android是基于Linux內(nèi)核,但按Google的說法,它卻不是一個Linux操作系統(tǒng)。此外,它沒有本地窗口系統(tǒng),也不支持全套標(biāo)準(zhǔn)Linux庫,包括GNU C庫。這個特點就使現(xiàn)有Linux應(yīng)用或庫的重用變得很困難。Android也不使用諸如J2SE和J2ME那樣的標(biāo)準(zhǔn)Java APIs。結(jié)果是:為這些平臺所編寫的應(yīng)用與為Android平臺所編寫的應(yīng)用不能兼容。Android僅重用Java語言語法,卻并不提供與J2SE或J2ME綁定的完整類庫和APIs。

下圖說明了目前的Android架構(gòu)(來自Android開發(fā)者指南)。

向Qt 移植Android(Java)應(yīng)用

系統(tǒng)通過一些系統(tǒng)驅(qū)動程序(如照相機,顯示屏,WiFi和鍵盤等)訪問移動電話的各項資源。之上的一層則由Andriod庫和運行系統(tǒng)(RunTime)組成。***一層Android提供了一套應(yīng)用框架庫,使庫擴展和新應(yīng)用創(chuàng)建均成為可能。

#p#

Android可以重用其它應(yīng)用的其它一些組件。例如,你需要重用適合的滾動條組件,并使其也能用于其它系統(tǒng),同時可以調(diào)用這樣的組件來為自己工作。為此Android系統(tǒng)被設(shè)計為:在需要用到系統(tǒng)的任何部分時,系統(tǒng)就會啟動一個應(yīng)用進程,并針對那個部分的Java對象進行實例化。這樣Android并不提供如main函數(shù)這樣一個入口,而只提供了一些基本組件:activity(活動),services(服務(wù)),broadcast receives(廣播接收器)和content providers(內(nèi)容提供器)。

Activities(活動)代表Android應(yīng)用的屏幕。從某個活動中你可以顯示按鈕、標(biāo)簽、菜單等。所有的活動都是android.app.Activity 類的子類。Services(服務(wù))不可見,但卻在后臺運行。例如,一個服務(wù)能在用戶執(zhí)行其它任務(wù)時播放音樂。每個服務(wù)都繼承自android.app.Service基類。Broadcast receives(廣播接收器)是一些組件,它們可以接收并響應(yīng)不同的廣播告示,例如電量低這樣的消息。所有的接收器都繼承自android.content.BroadcastReceive基類。content provider(內(nèi)容提供器)負責(zé)提供可供其它應(yīng)用使用的應(yīng)用數(shù)據(jù)。有了內(nèi)容提供器,在不同應(yīng)用之間共享數(shù)據(jù)就變?yōu)榭赡堋K械膬?nèi)容提供器都繼承自android.content.ContentProvider基類。

Android開發(fā)環(huán)境包括:Android SDK、Android源代碼,和有助于快速編制Android應(yīng)用的一些可選的集成開發(fā)環(huán)境。Android軟件開發(fā)工具包(SDK)由一些庫和工具組成,包括一個能運行應(yīng)用的模擬器。Android SDK可用于Windows、Mac OS X,和Linux。很多種集成開發(fā)環(huán)境都提供Android開發(fā)支持,如Eclipse(針對Andriod的Eclipse插件)。

Qt S60 概述

Qt應(yīng)用是用C++加上編譯前能生成標(biāo)準(zhǔn)C++代碼的附加預(yù)處理器所實現(xiàn)的幾種非標(biāo)準(zhǔn)擴展所開發(fā)的。Qt也提供了與其它幾種編程語言的綁定,如Python、Ruby,和Perl。

Qt得到廣泛使用得益于其GUI widget,但它也提供了一整套的非GUI相關(guān)特性:SQL數(shù)據(jù)庫訪問、XML解析、線程管理、網(wǎng)絡(luò)支持及用于文件處理的一個統(tǒng)一跨平臺API。Qt已被成功地移植到了S60諾基亞平臺上。Qt for Symbian將"讓你能創(chuàng)建具創(chuàng)新性用戶體驗的優(yōu)秀應(yīng)用,同時又能快速進入市場"。比較Android,Qt不應(yīng)該被視為移動電話平臺,而應(yīng)該視為一個有趣而易用的編程框架,定會對移動編程事業(yè)做出可觀貢獻。

Qt現(xiàn)已被移植到了S60平臺,卻仍有一些APIs還沒有被實現(xiàn),如訪問照相機和名片簿模塊。不過,通過對某些Symbian應(yīng)用的回調(diào)還是可以訪問這些系統(tǒng)服務(wù)的。

向Qt 移植Android(Java)應(yīng)用

為開發(fā)Qt Symbian應(yīng)用,你需要安裝Qt S60 Nokia SDK,SDK由組成庫和開發(fā)工具(包括針對S60環(huán)境的模擬器)組成。此外,Carbide.C++ IDE(基于Eclipse框架)提供了完整的開發(fā)環(huán)境,對開發(fā)伙伴們提供了很大程度的幫助。你可以在諾基亞論壇維基百科中讀到有關(guān)Qt for Symbian的有趣文章(請參閱Qt for Symbian 分類)。

在Carbide 集成開發(fā)環(huán)境上構(gòu)建Qt for Symbian應(yīng)用是很簡單的,這些應(yīng)用可以在S60模擬器甚至你的終端上(首先需要安裝Qt for Symbian庫)啟動。任何Qt應(yīng)用的入口都是main方法(請記住:Android應(yīng)用從某個Activity,即活動中啟動)。

范例

這是Android上的一個"Hello World ”簡單應(yīng)用。

  1. package helloandroid;   
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TextView;   
  5. public class HelloAndroid extends Activity {      
  6. @Override     
  7. public void onCreate(Bundle savedInstanceState) {         
  8. super.onCreate(savedInstanceState);         
  9. TextView tv = new TextView(this);         
  10. tv.setText("Hello World");         
  11. setContentView(tv);    
  12.  }  

如前文所述,任何Android應(yīng)用的入口是一個Activity(活動,更精確的說法是android.app.Activity#onCreate(Bundle) 方法)。Android沒有標(biāo)簽類,但卻有能用作標(biāo)簽的文本視圖。然后,我們創(chuàng)建一個文本視圖,接著以剛剛創(chuàng)建的文本視圖設(shè)置Activity的內(nèi)容。

現(xiàn)在,讓我們看一下如何創(chuàng)建一個相同的應(yīng)用,不過是在Qt框架上。

#include <QApplication>#include <QLabel> int main(int argc, char *argv[]){  QApplication app(argc, argv);  QLabel label("Hello, world!");  label.show();  return app.exec();}
它只是打開一個應(yīng)用并顯示標(biāo)有"Hello World"字符串的一個標(biāo)簽。你可以看到,主Qt類(QApplication)通過Main參數(shù)進行初始化。如前所述,Qt應(yīng)用的入口是Qt主類中的main函數(shù)。然后,它創(chuàng)建一個簡單的標(biāo)簽并顯示其內(nèi)容。***,應(yīng)用會從Qt應(yīng)用的執(zhí)行中返回代碼。另一個要點就是:這樣的代碼段也能在Maemo平臺上得到編譯并啟動(顯然,圖形效果不會相同,因為你使用了具有不同widgets的不同平臺)。

#p#

下例說明了如何在Android和Qt應(yīng)用上分別插入一個菜單。

在Android上,菜單是以方法android.app.Activity#onCreateOptionsMenu(Menu)定義。而菜單項的回調(diào)則以方法android.app.Activity#onOptionsItemSelected(MenuItem)定義。

  1. package helloandroid;   
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TextView;  
  5. import android.widget.Menu;  
  6. import android.widget.MenuItem;   
  7. public class HelloAndroid extends Activity {      
  8. private final int MENU_QUIT = 1;     
  9.  @Override     
  10. public void onCreate(Bundle savedInstanceState) {         
  11. super.onCreate(savedInstanceState);        
  12.  TextView tv = new TextView(this);        
  13.  tv.setText("Hello World");         
  14. setContentView(tv);    
  15.  }     
  16.  /*  
  17.  Creates the menu items   
  18. */     
  19. public boolean onCreateOptionsMenu(Menu menu) {        
  20.  menu.add(0, MENU_QUIT, 0, "Quit");         
  21. return true;    
  22.  }      
  23. /*   
  24. Handles item selections  
  25.  */     
  26. public boolean onOptionsItemSelected(MenuItem item) {      
  27. switch (item.getItemId()) {      
  28. case MENU_QUIT:          
  29. quit();          
  30. return true;     
  31.  }      
  32. return false;     
  33. }   

在Qt for Symbian上則會簡單一些。你只需定義一個QtAction,然后將其插入到應(yīng)用的菜單欄中。***,以connect方法(用于定義Qt中的任意回調(diào))來定義回調(diào)。

  1. #include <QApplication> 
  2. #include <QAction> int main(int argc, char *argv[]){    
  3. QApplication app(argc, argv);    
  4. QAction exitAction = new QAction(tr("&Exit"),this);   // Add action direct to menubar  menuBar()->addAction(exitAction);    
  5. connect(exitAction, SIGNAL(triggered()),this, SLOT(close()));  

 API 映射

文件輸入/輸出

對文件或其它設(shè)備的讀寫。.

Android類(出自package java.io):File, FileReader, FileWriter, BufferedReader, BufferedWriter

Qt類:QIODevice, QFile, QTemporaryFile, QBuffer, QProcess, QTcpSocket, QUdpSocket, QDataStream, QTextStream

網(wǎng)絡(luò)功能

Socket通信。

Android類(出自package java.net):Socket, InetSocketAddress, ServerSocket

o Qt類:QTcpSocket, QUdpSocket

HTTP/FTP 通信。

Android類(出自package java.net):HttpURLConnection, URL

Qt類:QNetworkAccessManager, QUrl, QUrlInfo

Android類(出自package org.apache.http.*):HttpClient, HttpGet, HttpPost, HttpResponse

Qt類:QHttpHeader, QHttpRequestHeader, QHttpResponseHeader

Qt 類:QFtp(Android中無對應(yīng)類)

媒體

對文件或其它設(shè)備的讀寫。

Android類(出自package ndroid.media):MediaPlayer, MediaRecorder

o Qt類:AudioOutput, MediaController, MediaNode, MediaObject, MediaSource,ObjectDescription, Path, VideoPlayer

Android與Qt for Symbian的對比

Android被設(shè)計成移動電話平臺。因此,它能訪問各種系統(tǒng)資源,如觸摸屏、照相機,及通話功能等。另一方面,Qt是一個跨平臺應(yīng)用和用戶界面框架,最初針對桌面環(huán)境而設(shè)計。而且,Qt還未提供能訪問移動電話資源的機制。下表說明了Android和Qt for Symbian之間的一些重要差異。

Android提供了對PIM(名片夾,日歷)的訪問,而Qt for Symbian尚未提供;

Android提供了對電話通話功能的訪問,而Qt for Symbian尚未提供;

Android提供了對信息收發(fā)功能的訪問,而Qt for Symbian尚未提供;

Android提供了對照相機的訪問,而Qt for Symbian尚未提供。

不過已有Qt for Symbian移動擴展補充提供了相關(guān)的支持。

在Android中,你可以從一個XML說明文件中加載應(yīng)用的用戶界面(如果你使用Glade構(gòu)建自己的應(yīng)用用戶界面,Maemo也支持該特性)。然而Qt for S60并不支持這種特性;
 
Android基于Java,而Qt for Symbian基于C++;

Qt是跨平臺的。也就是說,應(yīng)用有機會既在Qt for Symbian上執(zhí)行也能在Qt for Maemo上執(zhí)行,甚至能在windows桌面系統(tǒng)上執(zhí)行。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-13 11:24:55

QT MPlayer 移植

2011-06-16 08:46:17

Qt Symbian 手機

2011-06-13 11:07:22

QT 移植

2011-06-25 15:05:48

達內(nèi)培訓(xùn)移動開發(fā)

2010-07-23 16:08:38

OPhone平臺

2010-01-28 13:50:03

Android移植

2011-06-13 15:57:26

linux QT QTOPIA

2015-05-05 10:16:17

AndroidWindows

2011-07-04 10:56:10

Qt 移植 編譯

2011-06-29 10:46:01

Qt Eembedded Linux

2011-07-02 13:42:24

Qt 移植

2019-10-08 09:55:43

微軟瀏覽器Windows

2018-11-08 09:38:17

微軟 Windows Linux

2011-07-04 15:13:31

QT MPlayer 移植

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2011-06-30 16:08:05

Qt 字庫 QPF

2011-06-30 15:51:39

2010-07-30 14:08:51

.NET for An

2016-02-26 10:01:12

微軟安卓移植

2012-05-18 20:30:19

微軟 Android ap
點贊
收藏

51CTO技術(shù)棧公眾號