symbian系統開發教程(一)

第一章:Symbian OS簡介
作者:謝興????????enigma19971@hotmail.com
????????????????????????????????????????---轉載需注明出處????? 下載word文檔
1.1.??? Symbian系統簡介
當前有很多手機運行Symbian OS,數量甚至超出您的想象。到目前為止已經有超過7500 萬、100 多種型號的手機運行Symbian OS。這些電話大部分都形態迥異:有的配有鍵盤,有的采用筆控輸入;有的配備TFT 彩色屏幕,有的則配備黑白LCD 顯示屏;有的擅長于音樂播放,有的專注于電子游戲、圖像處理甚至電視功能;有的手機面向個人消費者,有的專門針對商務用戶;有的是為單手操作設計的,有的是為雙手操作設計的——種類繁多不一而足。Symbian OS 手機受到廣大消費者的喜愛。僅2005 年就售出3400 萬部Symbian OS 手機——這相當于每不到一秒鐘就有一部Symbian OS 手機被出售。網絡運行商同樣青睞Symbian OS 手機。全球有250 多個移動電話網絡運行商選擇了Symbian OS 手機。所有這些都表明現在市面上有成千上萬的手機是基于Symbian OS 的,所以為symbian系統開發的應用程序會得到廣泛的應用。現在已經有5400 多種商業性應用軟件可供Symbian OS 手機應用。本教程旨在為您提供一些編寫Symbian OS 應用程序的入門知識。希望它會對您有所裨益,為開發Symbian OS 應用程序打下一個良好的基礎。
1.2.??? 開發語言
從開發初期起,Symbian OS 就是專門為移動電話而設計的,因此從彈性的電源管理(resilient power-management)到內存資源的謹慎使用,全都是為了滿足手機操作系統的特定需求。作為Symbian OS 的開發人員,您將受益于Symbian OS 這樣一個專門為移動設備而創立并隨著市場一起發展的開發平臺。Symbian OS 最“基本”的編程語言是一種改進的C++。Symbian OS C++ 經過特殊設計與優化,以利于降低手機電池能耗和內存使用。比如,為了節約電池耗電,所有Symbian OS 程序都是基于事件(event-based) 的,而當沒有任何程序進行事件處理時,CPU 就進入休眠。您在開發軟件時也可以使用Java、Python、.NET(使用Visual Basic 和帶AppForge’s Crossfire 的C#)、Perl、OPL和Adobe Flash,但是Symbian OS C++ 是最強大(它允許最大限度的利用操作系統提供的所有功能)也是最快捷(因為它直接以編譯碼運行,而無需在運行時進行解譯)的語言。這也就是為什么我們在本書中選擇C++ 來向您演示如何進行Symbian OS 開發的原因。好了,閑言少敘,讓我們言歸正傳。
1.3.??? 準備工作
首先您需要有一臺電腦能創建并測試在Symbian OS 手機上運行的應用程序。這也就是說電腦要有一個較快的CPU 處理器(至少1.5GHz)和相當大的RAM(512MB或更大)以及一個大容量硬盤(至少有2GB 剩余空間)。該電腦必須能運行Windows 2000 或XP 操作系統。然后您需要開發軟件來幫助您編寫代碼并進行編譯。這可通過包含編輯程序(editor)、編譯程序(compiler) 和鏈接程序(linker) 的集成開發環境(IDE) 來完成。在這推薦兩種適合Symbian OS 程序開發的IDE。對于開發非商業用途的Symbian OS 應用程序,Nokia 的Carbide.c++ Express 版本是最理想不過了,它建立在Eclipse IDE 的基礎上,供免費下載。對于使用Visual Studio.NET 2003 的程序員來說,也可選擇Carbide.vs。這是一套基于Microsoft Visual Studio .NET2003 IDE 的工具,用于開發S60 和Series 80 軟件。您還需要軟件開發包(SDK), 專門用來編寫和創建Symbian OS 應用程序。基于不同手機類型,有不同版本的SDK 供選擇,具體使用哪個SDK 請見以下幾頁的說明。如果您還沒有決定具體的手機類型或平臺而無法確定選擇哪個SDK,我們建議您一開始可使用S60 和UIQ SDK。如果您想為最新款的手機(如Nokia 3250、E60、E61、N71、N80、N91、N73 或N93)編寫應用程序,那就選擇基于Symbian OS v9 的SDK(UIQ 3 或S60 第三版),要么您就選擇更低版本的SDK(UIQ 2.1 或S60 第二版)。
不同版本的Symbian OS 之間有什么區別?主要的分別是,在Symbian OS 9.1 版本之前,為較低版本的Symbian OS編寫的軟件往往可在較高版本上運行,但9.1 版本與以往的版本截然不同。如要運行在9.1 版的Symbian OS 上,應用程序必須稍加修改并進行再次編譯。接下來您需要下載您所選擇的IDE 和SDK。以下章節將向您介紹如何在互聯網上找到這些工具。
1.4.??? S60 平臺
??? S60 平臺是一個完整的應用程序包(package),用戶接口和構建于Symbian 系統技術的開發工具。S60 用戶接口 (UI) 經過精心的設計,方便用戶使用,便于單手操作。從用戶的角度看來,該平臺最大的特點在于它的用戶界面:大的彩屏和各種輸入鍵(兩個軟件鍵, 五方位的導航鍵,和幾個專用的鍵)。 單手操作和大彩屏的優點能使應用程序開發者提供更有吸引力的內容和提供更方便的導航功能,同時增加用戶使用手機時的愉快體驗。
??? 目前,s60平臺上已經存在各種各樣的應用軟件. 其中最重要的有:高級智能電話應用程序,個人信息管理應用程序(PIM)(例如, 電話簿,日歷, 相冊), 短信, 網頁瀏覽, 電子郵件和應用程序安裝引擎,它能夠讓您自由地從電腦上下載軟件到您的手機上。
??? S60 第三版本支持兩種不同的外觀:
????????? QVGA Portrait (240x320)
????????? QVGA Landscape (320x240)
1.5.??? 如何選擇SDK
基于Symbian OS 的手機外型各異,用戶界面(UI) 也不盡相同。為了給特定的用戶界面編寫應用程序,您必須選擇特定的SDK(盡管應用程序的引擎往往與用戶界面無關)。大部分運行Symbian OS 的手機采用的是S60 用戶界面并使用鍵盤操作。S60 已經發布了一系列版本,選擇正確的S60 SDK 和相應的Symbian OS 十分重要:
S60 第三版– Symbian OS v9.1
S60 第二版功能包3 – Symbian OS v8.1
S60 第二版功能包2 – Symbian OS v8.0a
S60 第二版功能包1 – 升級Symbian OS v7.0s
S60 第二版– Symbian OS v7.0s
S60 第一版– Symbian OS v6.1
您可在以下網站查到每一系列S60 SDK 所包含的手機型號列表:www.symbian.com/developer/sdks/sdks_series60.asp
其它大部分基于Symbian OS 的手機采用筆控輸入的UIQ 用戶界面。以下網站列出了基于各版本的UIQSDK 的手機機型www.symbian.com/developer/sdks/sdks_uiq.asp
您可以到以Nokia的網站下載SDK www.forum.nokia.com
1.6.Carbide.c++ 集成開發環境(IDE) ?
前面已經提到了各種集成開發環境,這里我們主要介紹Carbide.c++的集成開發環境。Carbide.c++的集成開發環境(IDE)基于Eclipse集成開發環境版本3。增添了能使Eclipse處理symbian c++ 源文件和編譯Symbian工程的插件。這些插件分為以下幾類:
????????? C/C++開發工具箱(CDT)。這是一個使得Eclipse管理和編譯symbian工程的工具集
????????? Symbian插件。這些插件由symbian開發,使得eclipse能夠處理Eclipse C++的概念,同時提供對Symbian操作系統軟件開發工具箱和Symbian工具鏈的支持。
????????? Nokia插件。由Nokia開發,提供對Symbian操作系統工具箱的更多支持。插件實現了C++編譯器,symbian系統的調試器,并且加入了Carbide.c++系列產品的商業版本的高級特性。
很明顯,因為Carbide.c++是基本的Eclipse集成開發環境,開發者可以進一步定制其它的商業或免費的插件,比如說,一個版本控制系統,一個UML建模系統等。
Carbide.c++有自己的安裝程序,所以安裝比較簡單。在啟動這個產品之后,用戶看到的集成開發環境和Eclipse開發環境十分類似,如下圖所示,因為Carbide.c++是設計用于處理symbian c++應用程序的,所以其集成開發環境的左邊顯示的是c/c++工程視圖,這個視圖用于顯示構成一個典型symbian c++工程源文件、頭文件,資源文件。
關于eclipse平臺和插件的相關知識,不是本教程所關心的重點, 有興趣的讀者可參考相關的其他著述。
1.7.??? 開發環境的構建
????????? 第一步:安裝JDK5.0
????????? 第二步:安裝ActivePerl(需要5.6.1以上版本)
????????? 第三步:安裝Symbian sdk
????????? 第三步:安裝Carbide.c++1.2 版本。 Carbide有不同的版本。 其中Express版本是免費安裝的,但不支持UI設計功能,也不支持在手機上調試的功能。
注意:這幾個文件需要放在一個目錄下面。否則,在編譯程序的過程中,可能會出現難以預料的錯誤。
1.8.??? 文件目錄的布局
在動手寫代碼之前,我們有必要了解工程的文件組織結構。如果您看過SDK中的例子工程,或是用IDE的工程向導創建一個UI應用程序,您就會了解一個典型的工程文件結構布局是怎樣的。
??? 當工程增長到一定程度的時候,好的文件目錄布局將有助于幫助跟蹤代碼的變更。工程中包含了各種不同類型的文件,包括源文件和其他類型的文件,我們通常將這些文件分開來存放,下面我們簡短地介紹這些文件。
??? 資源文件, 例如 .bmp 或 .wav 文件, 通常被單獨地存放在一個目錄下面。 測試代碼也會和產品代碼分開來存放。所以,一個典型的UI 應用程序會有如下這樣一些目錄結構和文件。

文件目錄
存放文件類型
data (S60)
存放資源規格文件(.rss)
Gfx (S60)
應用程序資源文件,例如圖片和聲音文件。
Group
該目錄存放工程文件 (例如 .mmp?和 bld.inf)
Images (UIQ)
應用程序資源文件,例如圖片。
Inc
該目錄存放頭文件 (typically .h, .hrh?和 .inl)
rsrc (UIQ)
存放資源規格文件 (.rss, .ra)
src
該目錄存放 .CPP 文件
Test
存放測試代碼

在group 目錄下面,有兩個重要的文件,這兩個文件都與創建Symbian工程相關:
如果,需要在命令行編譯工程,必須創建如下兩個工程文件:
·???????? 工程定義文件 (.mmp file),這個文件對要編譯的工程進行描述,并定義要構建的資源文件。該文件是環境無關的,編譯工具用它來生成針對各種目標環境下的make files文件。
·???????? 組件描述文件(bld.inf), 這個文件列出了一組相關的工程, 并包含一些編譯指令.
CodeWarrior?和 Carbide.c++ 都能夠導入工程定義文件,并用它來在IDE環境下創建工程。下面詳細描述這些文件的格式。
????????? 組件(component)描述文件: bld.inf
??? Bld.inf 是一個文本文件。它的內容非常繁瑣,主要包括工程定義文件mmp和其他的任何編譯工具所需要的文件。該文件分為多個節,其中,mmp文件列表在PRJ_MMPFILES節中。即使一個工程文件只包含一個mmp文件,bld文件仍然是必須的。下面是一個典型的bld.inf文件。
// 目標平臺
PRJ_PLATFORMS
WINSCW GCCE

// 從工程中輸出的文件
PRJ_EXPORTS
// None

//
工程定義文件
PRJ_MMPFILES
filebrowseapp.mmp

// 工程定義文件(測試代碼用)
PRJ_TESTMMPFILES
../test/FileBrowseTest.mmp
??? 在上面的例子中, 如PRJ_PLATFORMS 聲明所示,默認情況下工程被編譯為針對WINSCW平臺和 GCC-E平臺的執行代碼。 當您用CodeWarrior為模擬器編譯代碼的時候,您使用的是WINSCW 平臺, WINSCW的來由是,最終的代碼運行于Windows, 單線程模式(in a Single process),并用CodeWarrior編譯。
??? 平臺的名稱用來標識最終的可執行代碼所運行的那個平臺。 所以, 當上面的代碼被編譯完后,可執行程序被放在 /epoc32/release/winscw 目錄下面(根據是調試(debug)版本還是釋放(release)版本,被放在 /udeb 或 /urel 子目錄下面)。
如果代碼是針對手機硬件的,需要選用GCCE平臺。這時,最終的可執行代碼被放到/epoc32/release/gcce/目錄下面。
????????? 工程描述文件 (mmp)
mmp 文件中的每個語句都以一個關鍵字開頭。下面是一個典型的mmp 文件的例子。
// filebrowseapp.mmp
TARGET??????????????filebrowseapp.exe
TARGETTYPE??????????exe
UID?????????????????0x100039CE 0xE80000A6
????
VENDORID????????????0

#ifdef __WINSCW__
CAPABILITY??????????AllFiles??//????AllFiles on emulator since no signing is required???????
#else
CAPABILITY??????????NONE??????//????No capabilities on hardware - otherwise SIS file signing is required
#endif

SOURCEPATH??????????../src
SOURCE??????????????FileBrowseAppUi.cpp
SOURCE??????????????FileBrowseDocument.cpp
SOURCE??????????????FileBrowseApplication.cpp
SOURCE??????????????FileBrowseBaseView.cpp
SOURCE??????????????RFsEngine.cpp

SYSTEMINCLUDE???????/epoc32/include
USERINCLUDE?????????../inc


SOURCEPATH??????????../data

START RESOURCE??????filebrowseapp.rss
TARGETPATH??????????/resource/apps
HEADER
END

START RESOURCE??????filebrowseapp_reg.rss
TARGETPATH??????????/private/10003A3F/apps
END

START RESOURCE??????filebrowseapp_loc.rss
TARGETPATH??????????/resource/apps
LANG????????????????SC
HEADER
END
START BITMAP filebrowseapp.mbm
TARGETPATH /resource/apps
HEADER
SOURCEPATH ../gfx
SOURCE C16 folder.bmp
SOURCE C16 file.bmp
SOURCE 8 mask.bmp
END

LIBRARY?????????euser.lib efsrv.lib cone.lib eikcore.lib eikcoctl.lib eikdlg.lib egul.lib eikctl.lib apparc.lib
LIBRARY bafl.lib
LIBRARY avkon.lib CommonEngine.lib
下面簡單地描述每個關鍵字的作用:

TARGET
該關鍵字指明了目標文件(exedll文件)的名稱。
TARGETTYPE
該關鍵字指明了工程所產生的目標文件的類型,在上面的例子中,我們生成了一個可執行文件。在大多數情況下,目標文件的類型為dll,exe或是其他的插件(plugin)。
UID
目標(通常指可以執行的.exe.dll文件)具有三個UID,這些UID用來標識組件,第一個UID是無須指定的。因為它是編譯工具根據目標的類型自動分配的。所以這里所指定的實際上是UID2,這個值進一步指明了目標的類型,上面例子中,值(0x100039CE)指明了目標文件是一個應用程序,Symbian系統使用這個值來標識所有的應用程序。下一個指定的UID 對每個應用程序來說都是唯一的。它標識了這個應用程序的注冊資源文件和該程序的安裝包文件.pkg。所以為了保證這個值的唯一性, 您必須要向Symbian申請這個UID,由他們負責從數據庫中為您的應用程序分配一個UID。可到Symbian的網站上了解更多的相關信息。有一些UID的值是用來測試的,例如SDK中的例子:文件系統瀏覽應用程序(filesystem browser)所使用的UID0xE80000A6, 您也可以在測試您的應用程序的時候使用這個值,但注意,不要在您的最終產品中使用它。 ?
SECUREID
這是個可選的關鍵了,上面的例子中沒有出現。該關鍵字為應用程序定義了安全標示符,用來指明這個程序可以訪問哪個私有的目錄。如果該關鍵字沒有使用,用UID3來代替該關鍵字。
VENDORID
該關鍵字是在Symbian OS v9.1版本新增的。用來指定軟件提供商的ID號。該關鍵字不是必須的,可省略。
CAPABILITY
這是 Symbian OS 9.1新增加的關鍵字。該關鍵字指明了應用程序的權限(或稱作能力,如:查看系統目錄)。大上面的例子中,應用程序在模擬器上和在手機上被分配了不同的能力(capability)。在模器上,該程序被賦予了AllFiles 的權限, 比在手機上運行時,能看到更多的私有文件系統的區域。沒有被賦予AllFiles 能力的程序不能看到/Sym 目錄下的內容。應用程序只有在經過認證(certificate)以后才能獲得AllFiles的能力。關于認證和簽名的內容,我們在這一章的后面會講到。
SOURCEPATH和SOURCE
SOURCE關鍵字指明了有哪些源文件和資源文件需要編譯,SOURCEPATH關鍵字指明了這些文件的位置。這個位置既可以是相對路徑(相對于mmp文件),也可以是絕對路徑。
SYSTEMINCLUDE
這個關鍵字指定了系統頭文件的位置,系統頭文件通常用#include<>語句包含。
USERINCLUDE
該關鍵字的作用類似于SYSTEMINCLUDE,它指明了在用戶自定義頭文件所在的位置。
START RESOURCE…END
START RESOURCE 關鍵字表明了一個信息塊的開始,這些信息指明了如何編譯資源文件。END 標示該信息塊結束。
TARGETPATH
該關鍵字用來指定被編譯后的資源文件的位置。注意: 由于安全方面的考慮,所有的可執行代碼(exedll)都從手機上的/sys/bin/ 目錄運行。可執行代碼不需要用該關鍵字指定位置。TARGETPATH 關鍵字僅僅用來指定編譯后的資源文件的位置。
HEADER
這是一個可選的關鍵字,當它被使用的時候,系統將會在/epoc32/include/路徑下創建資源頭文件(.rsg)。這個頭文件包含了允許以C++代碼引用特定資源的標識符。
LIBRARY
這個關鍵字列出了應用程序需要鏈接的庫文件。
STATICLIBRARY
該關鍵字用來指定需要被靜態鏈接的庫文件 (庫文件中的代碼會被鏈接到您的程序中,而不是需要時才裝載到內存)
START BITMAP…END
這一節包含了應用程序圖標所使用的位圖(bitmap),以及如何將這些位圖編譯成.mbmSymbian系統專有的圖像格式)的方式。
EPOCSTACKSIZE
該關鍵字是可選的,我們上面的例子中并未用到。在以前的Symbian OS 版本中,缺省的棧大小為0X5000字節。在v9.1版本中,缺省值為0x2000。為了增加棧的大小,可以使用該關鍵字。例如:EPOCSTACKSIZE 0x5000 。要注意的是, 對棧設置僅僅對真實設備有效,但對模擬器無效。
EPOCHEAPSIZE
該關鍵字也是可選的,我們上面的例子中并未用到。這個關鍵字指定了應用程序可以使用的最大、最小堆空間。缺省情況下,4K為最小的尺寸,1M為最大的尺寸。

1.9.??? 第一個程序: HellowWorld
1.9.1.??? 創建工程
運行Carbide 集成開發環境,在菜單欄上選擇file->New->Symbian OS C++ project,出現如下圖所示的對話框:
我們選擇帶用戶界面設計器的圖形用戶界面應用程序(Carbide Express 版本不支持用戶界面設計的功能)。然后點擊“下一步”按鈕。出現下面的對話框:
用戶選擇一個sdk的版本(筆者的機器上安裝的是s60_3rd_FP1版本的sdk)。繼續下一步:
按下一步,繼續:
選擇一個空的界面,這樣我們可以自由地在上面添加控件。下面的步驟一直按“下一步”,直到完成。
1.9.2.??? 在模擬器上運行和調試
工程建立完成后,就可以構建(build)工程了。在將程序放到手機上運行之前,我們通常需要先在模擬器上運行、調試程序。模擬器是SDK附帶的一個軟件,能夠模擬真實手機的運行情況。
在工程透視圖中,選中工程,點擊右鍵,將活動構建設置為Emulator Debug(Winscw)。如下圖所示:
這樣,編譯出來的程序版本才是針對模擬器的。設置后,可以構建(build)工程了:在工程透視圖中選中工程,點擊右鍵,選擇“build Target Only”(只編譯模擬器版本,節省時間)。
最后,點擊工具欄上的運行按鈕,選擇Run As->1 Run Symbian OS Application
Carbide 啟動模擬器, 這個過程需要持續幾十秒到幾分種,依賴機器的配置。在模擬器啟動后,點擊模擬器上的軟件鍵,模擬器會出現下面的界面:

選擇Installed 選項后,可以看到應用程序的圖標:

在模擬器上點擊按鈕,運行該程序。
1.10.??????????? 在手機上運行和調試
1.10.1.???????????? 基本概念
能夠在模擬器上運行、調試程序后,您可能想要在真實的手機上運行您的程序。但在這之前,先需要搞清以下幾個基本概念:
????????? GCCE版本和ARM版本:
在真實設備上運行的程序版本不同于我們在模擬器上運行的程序版本,在設備上運行的版本必須是GCCE版本或ARM版本。其中GCCE版本是用SDK 自帶的編譯器的,使用它不需要付費,而ARM版本是專門針對ARM 平臺的,代碼經過優化,性能優于GCCE版本的程序,但需要付費。
????????? .sis文件和.pkg:
創建應用程序的GCCE 版本以后,需要創建一個Symbian 安裝文件(.sis)。從本質上來講,.sis文件只是一個壓縮文件, 它包含了組成應用程序所需的exe,dll,rss文件,和一些手機接收應用程序時所必須的信息(例如:語言種類,應用程序的UID)。現在的問題是,我們根據什么信息來創建這個sis文件呢?答案在于pkg文件, 在創建這個文件之前,先需要創建一個pkg文件,pkg文件中包含了一些有用的信息,包括將工程文件拷貝到手機的哪個目錄下面,程序的版本號等。
????????? 簽名(sign):
在開發s60 3rd版本的應用程序時,所有的 .sis 文件在安裝到手機之前,必須被簽名。如果您的程序沒有用到capability或只用到了對所有的用戶都開放的功能(utility),您可以使用自簽名認證(Self Signed certificate)。當在自己的手機上調試程序時,這種方法特別管用。
????????? 機上調試代理(on-device debug agent)
??? 如果想要在真實的手機設備上調試程序,需要在手機上安裝機上調試代理,這個手機上的代理程序通過藍牙或USB串行鏈路與調試器通信,在Carbide.c++調試器和目標機器之間的起到接口的作用。調試代理提供以下功能:
1.?????? 運行在Symbian 系統上作為調試代理。
2.?????? 為Symbian系統提供一個穩定的集成的接口
3.?????? 能被用來在真實的設備上調試應用程序
4.?????? 能燒入到系統鏡像中,或是被安裝的sis文件。
使用機上調試代理, 我們可以使用Carbide.c++ 集成開發環境來調試運行在手機硬件上的應用程序,這使得調試過程更為容易。機上調試代理可以在所有的S60 3rd 版本的設備上工作。包括在 UIQ 2nd版本 和 UIQ 3rd 版本的設備上。
1.10.2.???????????? 編譯、運行應用程序的手機版本
在清楚這些基本的概念后,下面我們看看,如何編譯和運行GCCE版本的應用程序:
1.?????????????? 編譯這個應用程序的GCCE版本.
2.?????????????? 創建Symbian 安裝文件(.sis)。
3.?????????????? 給.sis文件簽名。
4.?????????????? 在s60手機上安裝這個sis文件。
5.?????????????? 運行該應用程序。
首先,我們按下面的步驟,在Carbide中,編譯GCCE版本和創建sis文件。
1)?從菜單上選擇 Project > Properties 選項.
2)?在屬性對話框上, 點擊 C/C++ Build
3)?Configuration 下拉菜單中選擇 "S60 3.0 GCCE UREL"。
4)?點擊 OK
5)?從菜單欄上點擊 Project > Build Project
如下圖所示:

Carbide 根據工程的設置,創建了一個能在手機上運行的版本。如果編譯的過中沒有出錯,可以在目錄/Symbian/9.2/S60_3rd_FP1/Epoc32/release/gcce/urel中找到已經編譯好的可執行文件。然后,可以進行下一步:生成sis文件。
??? 打開工程視圖,找到sis文件夾中的 .pkg 文件,點右鍵,在彈出菜單中選擇:build PKG file。如下圖所示:
如果邊編譯的過程沒有出錯,可以在sis文件夾中找到經過簽名的.sis文件和擴展名為.cer的證書文件和擴展名為.key的密鑰文件。這兩個文件是Carbide自動生成的。
??? 將經過簽名的.sis(或.sisx)文件通過USB接口下載到手機(WAP, 郵件附件, 紅外, 藍牙),然后用文件管理器安裝,如果安裝的時候沒有錯誤提示,我們就可以在手機上運行程序了。
1.10.3.???????????? 在手機上調試
在真實的手機設備上調試比在模擬器上調試更加準確,而且不必使用昂貴的硬件調試設備。前面我們提到過,在手機上調試, 需要安裝調試代理,有兩不同的機上調試代理,分別為:Application TRK和System TRK
·??? Application TRK—僅僅支持應用程序的調試。
·??? System TRK—不但支持應用程序的調試,還支持有限的ROM調試。設備制作商可用它來調試設備驅動程序。
現在,我們來看看:
????????? 如何在手機上安裝調試代理軟件
??? 打開..Carbide/plugins/com.nokia.Carbide.trk.support_1.2.0.29/trk/s60目錄,可以看到有一個s60_3_1_app_trk_2_7.sisx文件,該文件就是調試代理(debug agent)的安裝程序,下面我們通過USB接口(或紅外、藍牙)將這個程序下載到手機上安裝。步驟如下:
1.???????? 將電腦和手機設備通過USB接口連接。
在手機識別出USB連接線后,設置手機,讓它從PC上接收文件。
1)?????? 選擇 USB Mode > File Transfer, 然后按OK鍵,這時有通知消息出現:手機將處于離線狀態。
2)?????? 按OK 軟件鍵確認該消息。
2.???? 將SISX 文件拷貝到MMC 卡。
3.?????? 用“安全刪除硬件”的方式斷開手機和PC 之間的USB連接。
4.?????? 在手機上,用文件管理器安裝SISX文件
??????? 在安裝好調試軟件后,現在就可以開始調試程序了。
??? PC和手機的通信接口有兩種:藍牙和USB,由于大多數的PC機中只有USB接口,下面我們就以USB連接方式來調試程序。
1.安裝最新的USB連接軟件,例如,S60設備使用的Nokia PC 套件。
2.用USB線連接Pc 和手機。
3.目標設備被連擊后,在S60設備上,選擇PC套件作為USB連接模式。
4.下載APP TRK 或 System TRK SISX 文件到手機上。(如果在已經下載安裝過該調試代理,這一步可省略)
5.在PC 上,打開設備管理,找到S60 手機USB的條目,如下圖所示:
記下端口號(在我們的例子中為COM5),后面我們要用到。 在手機的USB模式列表上選擇PC套件模式。然后在手機上啟動App TRK,將連接方式設置為USB,如下圖所示:

選擇“back”,然后重新啟動App TRK。
??? 在Carbide集成開發環境上(IDE),選擇工具欄上的 調試按鈕,選擇“debug”,如下圖:
  這時,會啟動一個“調試面板”,我們選擇第一項:“Symbian OS App TRK”,雙擊此項,將會生成一個啟動配置項(launch Configuration),在這個面板的右邊有一些關于調試的選項,如下圖所示:
  安裝要求填寫這些配置項, 這一步比較容易,有兩點要注意的是:Connection 面板中,Serial port選擇的值(這里為com5)必須是我們前面在設備管理器中所記錄下來的值。另外,在Installation面板中,需要指明要安裝的文件,這個文件就是我們在前面生成的經過簽名的sis文件,如下圖:
1.11.??????????? 用命令行方式編譯、運行GCCE釋放版本
下面我們以SDK自帶的helloworldbasic工程為例子,演示如何用命令行的方式來編譯和運行GCCE版本的程序。
????????? 第一步:創建GCCE釋放版本:
1.?????? 打開一個命令行窗口。
2.?????? 用cd group 進入工程的group 目錄。
3.?????? 輸入下面的命令: bldmake bldfiles。
4.???????? 再輸入:abld build gcce urel 或 abld gcce udeb (該命令產生手機上的調試版本)。上面的編譯腳本創建了一個GCCE版本的應用程序,在下面的目錄可找到該文件: Epoc32/release/gcce/urel/
??????? 第二步:創建sis文件
我們通過使用makesis工具來編譯.pkg文件得到.sis文件,在我們的例子中,該pkg文件位于例子中的 /sis目錄下。
1. 打開命令行窗口,并進入到HelloWorldBasic.pkg 文件所在的路徑:<S60_SDK_installation_directory>/Symbian/9.2/S60_3rd_FP1/S60ex/helloworldbasic/sis
2. 輸入 makesis helloworldbasic.pkg 命令:
3. 我們可以看到,在該文件夾下生成了一個helloworldbasic.SIS 文件。
????????? 第三步:用signsis工具為sis文件簽名
在進行簽名之前,我們需要兩個文件:私鑰文件和自簽名證書(self signed certificate)文件。這涉及到密碼學的知識,讀者可自己參考相關著作。這里,我們用只是makekeys工具生成這兩個文件。makekeys工具在下面的目錄可找到。
<SDK_installation_directory>/Symbian/9.2/S60_3rd_FP1/Epoc32。
1.???????? 為了產生私鑰文件和自簽名認證,在命令行下敲入以下命令:
運行完該命令后(可能要花幾分鐘的時間),可以看到,在該目錄下產生了兩個新的文件:mykey.key和mycert.cer。
2.???????? 給sis文件簽名,在命令行下敲入以下命令:
????????? 第四步:在手機上安裝sis文件。
這一步比較簡單, 僅僅將準備好的sis文件下載到您的手機。這個過程可以通過不同的數據通道完成(WAP, 郵件附件, 紅外, 藍牙, USB接口), 采用何種方式,取決于您的手機。
1.12.??????????? 導入工程
如果symbian c++的開發者在自己的計算機上已經有了各種各樣的symbian工程,并且用codewarrior或者命令行工具鏈編譯過該工程,他們會發現可以很方便地移植這些工程到Carbide.c++,不需要創建一個新的工程和手工插入這些源文件。Eclipse實現了從集成開發環境導入和導出信息的框架,并通過向導來實現這個過程。Carbide.c++也實現了這種工具。從菜單欄選擇File->import菜單項,用戶就啟動了一個有很多選項的導入面板。如下圖所示:
例如:如果我們想導入sdk中自帶的filebrowser的例子工程,我們在導入面板中選擇Symbian OS Bld.inf file選項,然后點擊下一步,這時會啟動“文件導入向導”對話框,在對話框中輸入filebrowser工程中的bld.inf文件(通常,這個文件在group目錄中)。
然后,一直點擊“下一步”按鈕,直到這個過程結束。如果工程被成功導入,在左邊的工程視圖中會出現該工程的信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455125.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小談c#數據庫存取圖片的方式

第一種方式 文件夾與數據庫配合 /// <summary>/// 上傳圖片/// </summary>/// <param name"FUSShopURL">FileUpload對象</param>/// <param name"UpladURL">圖片要放到的目錄名稱</param>/// <returns>如果Fi…

c#課程設計簡單題目_《C#項目案例》課程設計題目

1《C#項目案例》課程設計題目一、課程設計的基本目標1、通過本次課程設計&#xff0c;熟練掌握開發語言C#和開發環境——.NET。開發語言的熟練需要通過編寫一定長度的代碼(1000&#xff5e;2000行代碼)才能達到&#xff0c;開發環境的熟練需要反復的程序調試訓練。2、加深對軟件…

筆記吧

map的第一個為關鍵值&#xff0c;只可讀&#xff0c;不可寫。第二個為對應值&#xff1b;vector的消除有很大的困擾&#xff0c;感覺存在很大的局限性&#xff1b;問題——不能夠復雜話&#xff0c;一個問題先從較淺的方面想起&#xff0c;其實在現有基礎和請況下&#xff0c;不…

單例設計模式-靜態內部類

靜態內部類 靜態內部類應用實例 代碼演示 package com.atguigu.principle.singleton.type07;/** * author victor * site https://victorfengming.github.io/ * company XDL * project java_mode * package com.atguigu.principle.singleton.type07 * created 2021-02-02 20…

Symbian系統開發教程(二)

第二章&#xff1a;數據類型與語法 作者&#xff1a;謝興 enigma19971hotmail.com 轉載需注明出處 下載word版本 Symbian系統已經提供了一套已經定義好的內置的數據類型。為了保證你的代碼是編譯器無關的&#xff0c;應當使用下面symbian系統提供的數…

design php 如何使用ant_Ant Design Pro初探—添加面包屑

Ant Design Pro初探—添加面包屑上次咱們說了新建頁面&#xff01;頁面建成了&#xff0c;開始填充頁面 新建面頁面不會的看上一片文章:Ant Design Pro初探—新建頁面首先是需要添加家面包屑&#xff0c;上代碼&#xff1a;import React, { PureComponent } from react;import …

C++主要操作符重載的定義和總結

C中預定義的運算符的操作對象只能是基本數據類型&#xff0c;實際上&#xff0c;對于很多用戶自定義類型&#xff0c;也需要有類似的運算操作。例如&#xff1a; class complex { public: complex(double r0.0,double I0.0){realr;imagI;} void display(); private: do…

原生JS數組去重的幾種方法

有時候我們做項目的時候往往會需要把數組里面一些重復的項去掉&#xff0c;但是原生JS有排序&#xff0c;有篩選等等&#xff0c;但是就是沒有數組去重怎么辦呢&#xff1f;這能怎么辦&#xff0c;自己手動實現嘛。&#xff08;以下代碼直接在原型上添加的的方法&#xff0c;為…

單例設計模式-枚舉

枚舉 枚舉應用實例 代碼演示 package com.atguigu.principle.singleton.type08;/** */ public class SingletonTest08 {public static void main(String[] args) {Singleton instance Singleton.INSTANCE;Singleton instance2 Singleton.INSTANCE;System.out.println(inst…

拋物線交點式公式_拋物線交點式

以下是范文網www zhuodaoren com 分享的6 已知拋物線與軸兩交點在軸同側&#xff0c;它們的距離的平方等于&#xff0c;則的值為( )&#xff0c;希望能幫助到大家!(一)6 已知拋物線與軸兩交點在軸同側&#xff0c;它們的距離的平方等于&#xff0c;則的值為( )函數與一元二次方…

學習的動力

要有自學的意識&#xff0c;這是一個知識不斷更新、不斷涌現的時代&#xff0c;大學里的很多知識是過時的&#xff0c;就算入校時是熱門行業的但很可能四年后畢業找工作時已經變成了夕陽產業&#xff0c;學習是一種能力&#xff0c;但首先是一種態度&#xff0c;一個人想在快速…

java面向對象之父類的引用指向子類的對象

1 package Text; 2 3 public class Job { 4 public void dowork(){ 5 6 } 7 } 1 package Text; 2 3 public class Luosidao extends Job{ 4 public void dowork(){ 5 System.out.println("螺絲刀擰螺絲。。。"); 6 } 7 } 1 packa…

單例模式在JDK應用的源碼分析

單例模式在JDK應用的源碼分析 單例模式在jdk中的源碼分析 在我們JDK中,java.lang.Runtime就是經典的單例模式(惡漢式) 代碼分析Debug源碼代碼說明 public class Runtime {private static Runtime currentRuntime new Runtime();/*** Returns the runtime object associate…

lisp語言cond和if套用_LISP - 決策

決策結構需要程序員指定一個或多個條件由程序進行評估或測試&#xff0c;以及要執行的語句或語句如果條件被確定為true&#xff0c;如果條件被確定為false那么選擇要執行其他語句。下面是在大多數編程語言中一個典型的決策結構的一般形式為&#xff1a;LISP提供了以下類型的決策…

H264基本概念之 宏塊、片和片組

這幾個概念對比音頻信號處理可是全新的&#xff0c;下面簡要介紹一下定義和作用&#xff1a; 1、宏塊&#xff08;Macro Block&#xff09;&#xff1a;一個編碼圖像首先要劃分成多個塊&#xff08;4x4 像素&#xff09;才能進行處理&#xff0c;顯然宏塊應該是整數個塊組成&…

CodeVS 1044 攔截導彈(DP)

題目大意&#xff1a; http://codevs.cn/problem/1044/ 第一問題就是求序列的最長遞減數列的長度&#xff0c;第二問就是求數列的最長遞增序列的長度。 代碼&#xff1a; #include <iostream>using namespace std;int arr[30] {0}; int dp[30] {0}; int mp[30] {0};in…

鏈表(Linked List)之單鏈表

原文地址:傳送門 鏈表(Linked List)介紹 鏈表是有序的列表&#xff0c;但是它在內存中是存儲如下 小結: 鏈表是以節點的方式來存儲,是鏈式存儲 每個節點包含 data 域&#xff0c; next 域&#xff1a;指向下一個節點. 如圖&#xff1a;發現鏈表的各個節點不一定是連續存儲…

有字符csv文件導入matlab_Matlab:如何讀取CSV文件以及如何讀取帶有字符串數據項的CSV文件...

CSV&#xff0c;逗號分開的文件&#xff0c;如果能快速的讀取這些文件中的數據&#xff0c;無疑會幫助我們解決很多問題。1、 只有數據的CSV文件&#xff0c;CSV file that includes only numbers.As an example, create a text file, named as data.csv if you prefer, which …

xchg_mb_border()

顧名思義&#xff0c; xchg_mb_border() 交換 MB 邊界的像素。閱讀代碼可知&#xff0c;交換雙方為邊界緩存 (left_border,top_borders) 與重建圖象中的相應數據。其中 xchg 參數是否為 1 決定&#xff0c;在從邊界緩存賦值到重建圖象的同時&#xff0c;是否保存重建圖象的數據…

Introduction to the Optimizer --cbo

http://docs.oracle.com/cd/B10500_01/server.920/a96533/optimops.htm