成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

向Qt 移植Android(Java)應用

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

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

簡介

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

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

向Qt 移植Android(Java)應用 

向Qt 移植Android(Java)應用

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

本文提供的信息指引大家在開發中將Android應用移植到Qt for Symbian。

Android平臺概述

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

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

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

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

向Qt 移植Android(Java)應用

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

#p#

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

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

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

Qt S60 概述

Qt應用是用C++加上編譯前能生成標準C++代碼的附加預處理器所實現的幾種非標準擴展所開發的。Qt也提供了與其它幾種編程語言的綁定,如Python、Ruby,和Perl。

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

Qt現已被移植到了S60平臺,卻仍有一些APIs還沒有被實現,如訪問照相機和名片簿模塊。不過,通過對某些Symbian應用的回調還是可以訪問這些系統服務的。

向Qt 移植Android(Java)應用

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

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

范例

這是Android上的一個"Hello World ”簡單應用。

  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應用的入口是一個Activity(活動,更精確的說法是android.app.Activity#onCreate(Bundle) 方法)。Android沒有標簽類,但卻有能用作標簽的文本視圖。然后,我們創建一個文本視圖,接著以剛剛創建的文本視圖設置Activity的內容。

現在,讓我們看一下如何創建一個相同的應用,不過是在Qt框架上。

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

#p#

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

在Android上,菜單是以方法android.app.Activity#onCreateOptionsMenu(Menu)定義。而菜單項的回調則以方法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,然后將其插入到應用的菜單欄中。***,以connect方法(用于定義Qt中的任意回調)來定義回調。

  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 映射

文件輸入/輸出

對文件或其它設備的讀寫。.

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

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

網絡功能

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中無對應類)

媒體

對文件或其它設備的讀寫。

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

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

Android與Qt for Symbian的對比

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

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

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

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

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

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

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

Qt是跨平臺的。也就是說,應用有機會既在Qt for Symbian上執行也能在Qt for Maemo上執行,甚至能在windows桌面系統上執行。

責任編輯:zhaolei 來源: 互聯網
相關推薦

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

達內培訓移動開發

2010-01-28 13:50:03

Android移植

2010-07-23 16:08:38

OPhone平臺

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

2018-11-08 09:38:17

微軟 Windows Linux

2011-07-02 13:42:24

Qt 移植

2019-10-08 09:55:43

微軟瀏覽器Windows

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

2012-05-18 20:30:19

微軟 Android ap

2016-02-26 10:01:12

微軟安卓移植

2010-07-30 14:08:51

.NET for An
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕 亚洲一区 | 色综合99 | 国产成人精品一区二区三区 | 91直接看 | 久久免费国产 | 国产精品久久久久久久岛一牛影视 | 久久精品色视频 | 日本人和亚洲人zjzjhd | 欧美视频第二页 | 久久激情网| 91视频大全| 国产综合精品一区二区三区 | 精品国产一区久久 | 欧美天天视频 | 久久久久九九九女人毛片 | 午夜精品久久久久久久99黑人 | 免费在线黄色av | 国产欧美一级 | www.久久艹| 福利网站在线观看 | www.se91| 国产精品国产亚洲精品看不卡15 | 精品一区二区三区四区 | 久久久久国产一区二区三区四区 | 亚洲国产精品福利 | 日本网站免费在线观看 | 国产精品免费视频一区 | 99精品一区二区 | 日韩av一区二区在线观看 | 亚洲精品久久久久久久久久久久久 | 国产精品精品久久久久久 | 国产精品一区二区视频 | 超碰在线97国产 | 国产又色又爽又黄又免费 | 国产成人网 | 午夜久久久| 在线看91| 在线亚洲欧美 | 国产成人av一区二区三区 | 久久精品色视频 | 国产精品99久久久久久动医院 |