應用程式開發循環
截至目前為止,對於寫一支簡單的 MIDP 應用程式想必有一些概念了吧?不過對於如何的封裝及部署 MIDP 應用程式則隻字未提,底下我們來看看這個過程是如何完成的。利用 MIDP 來開發應用程式時開發循環過程:
編輯( edit )
利用文字處理軟體輸入 Java 原始程式碼,即 .java 的檔案。
編譯( compile )
利用 J2SE 中的編譯程式 javac 將 Java 原始程式碼,即 .java 的檔案編譯成類別檔,即 .class 檔。除了編譯的功能外,compiler 尚會檢查原始程式碼裡沒有用到非 CLDC 或是 MIDP 以外的套裝類別及相關的特性( features ),即屬性與方法。
封裝及部署( package & deployment )或稱 Build (發展)
這個過程包括:
Byte-code verfication 位元組碼的驗證。
為了減輕在行動電話中 JVM 的負荷,此階段是利用 pre-virifier (先期驗證器)處理類別檔。
封裝成 MIDlet Suite
利用 2SE 中的 JAR 工具將所有的經先期驗證過的類別檔( pre-verified class files )及應用程式裡用到的一些資源檔案封裝成單一的 JAR 檔。這個過程裡也會創造出一支 JAD 檔及 manifest 檔。
測試
最後,利用模擬器來測試程式的執行情形是否達成開發的的目的,一旦測試無誤之後,即可利用實際機器來測試了。
這個開發循環的流程圖解如(圖一)所示。
MIDP Suite
所有的 MIDP 應用程式的類別檔都必需被封裝成單一的 JAR 檔,以 KToolbar 的開發情形而言,每一支的專案都會被封裝成單一的 JAR 檔;由於每一支專案少則一支 MIDP 應用程式,多則數個,這些多個 MIDP 應用程式的集合就是所謂的 MIDP Suite。MIDP Suite 雖然是多個 MIDP 應用程式的集合,不過其組成元素卻不是只有 MIDP 應用程式的類別檔而已,其構成示素如(圖二)。
其中,除了與應用程式直接相關的MIDlet 類別檔外,尚有共用的類別及一些資源,包括文字檔及圖片檔。這個 JAR 檔未來便可以透過行動電話的所附的連接線與電腦連線用載入行動電話,或是透過網路下載至行動電話,最後成為行動電話裡實際可行的應用程式。不管是在實際的行動電話裡或是在模擬器裡,JAR 檔中的MIDlets 最後都變成一道道出現在畫面功能表中可以讓使用者點選的選項。
由 JAR 檔的構成裡,除了與應用程式相關的一些檔案外,尚有二項非常重要的檔案:manifest 及 JAD。其中 manifest 是一支用來描述 MIDlet Suite 內容的檔案,諸如 MIDlet 的名稱、版本及供應商等內容,而 JAD 則是說明裡面的每一個執行選項(即程式執行時的功能表選項)、JAR 檔案的位置等資訊。
manifest
manifest 檔案的內容是由一對對的 name-value 的組合,下表是預先定義好的 name-value 對,其中並分成一定要有的 name-value 對及選擇性的 name-value 對,參考(表一)。
下面是我們前面那支專案的 manifest檔的內容:
MIDlet-1: FirstApplication, /Sokoban.png, HelloMIDlet
MIDlet-2: SecondMIDlets, /ManyBalls.png, FewCommandsMIDlet
MIDlet-Name: FirstApplication
MIDlet-Vendor: Sun Microsystems
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
二相對照起來,有二點說明:
1.name-value 之間是以冒號加以分隔。
2.表中所謂的 MIDlet-n,事實上指的是一支支的 MIDlets,其中的 n 會從 1 開始編號,每新增一支 MIDlet 就會新增一列,並自動從上一個編號依序往下遞增,依此類推,如果有 n 個 MIDlet,那麼就會有 n 行 MIDlet-了:
MIDlet-1: ...
MIDlet-2: ...
...
MIDlet-n: ...
選擇性 |
name |
用途說明 |
否 |
MIDlet-n |
用來描述在 MIDlet Suite 裡一支支的MIDP 應用程
式的相關資訊。 |
否 |
MIDlet-Name |
MIDlet Suite 的名稱。 |
否 |
MIDlet-Version |
MIDlet Suite 版本。 |
否 |
MIDlet-Vendor |
MIDlet Suite 的提供廠商。 |
|
MIDlet-Icon |
表示 MIDlet Suite 的小圖示,其圖形格式是 .png 檔。 |
|
MIDlet-Description |
描述 MIDlet Suite 的相關資訊。 |
|
MIDlet-Info-URL |
描述 MIDlet Suite 相關資訊的 URL。 |
|
MIDlet-Jar-URL |
讓 application manager 知道要下載此 MIDlet Suite 時的 URL。 |
|
MIDlet-Jar-Size |
JAR 檔的大小。 |
|
MIDlet-Data-Size |
MIDlet Suite 所需持續資料儲存空間(persistent storage)的大小。 |
否 |
MicroEdition-Configuration |
執行 MIDlet Suite 所需的 Configuration 版本。 |
否 |
MicroEdition-Profile |
執行MIDlet Suite所需的Profile版本。 |
其中,MIDlet-n 的格式被分成三項:SecondMIDlets、/ManyBalls.png、 FewCommandsMIDlet。manifest 檔最後必需包括在 JAR 檔裡面。
JAD 與Java Application Descriptor
JAD 檔案內容的格式與 manifest 檔相同,不過使用上的目的卻是有差別的。
manifest 檔用來封裝( packaging ) MIDlet suite,而 JAD 則是用來部署( deployment ) MIDlet suite,特別是透過Over-The-Air 的部署程序時。在 JAR 檔下載到行動電話或是模擬器時,Application Management Software 便會透過檢查 JAD 檔,以便確定 MIDlet suite 是否適合。
JAD 檔不需要包括在 JAR 檔裡面。
JAD 檔裡一樣分成有一些預先定義好的非選擇性的及選擇性的 name-value 對,除此之外,程式設計師還可以定義屬於自己用的 name-value 對。
其中,非選擇性部份如下:
MIDlet-Name
MIDlet-Verson
MIDlet-Vendor
MIDlet-Jar-URL
MIDlet-Jar-Size
Microedition-Configuration
Microedition-Profile
選擇性部份:
MIDlet-Description
MIDlet-Icon
MIDlet-Info-URL
MIDlet-Data-Size
其中七項非選擇性的 name-value 對,就是會被 Application Management Software 檢查的項目。以下是 JAD 檔的內容:
MIDlet-1: FirstApplication, /Sokoban.png, HelloMIDlet
MIDlet-2: SecondMIDlets, /ManyBalls.png, FewCommandsMIDlet
MIDlet-Jar-Size: 17789
MIDlet-Jar-URL: FirstApplication.jar
MIDlet-Name: FirstApplication
MIDlet-Vendor:Sun Microsystems
MIDlet-Version: 1.0
範例的 manifest、JAR 與 JAD 檔案
既然每一支 MIDP 應用程式都要有二個 JAR 與 JAD 檔,可是這支程式從頭到尾,壓根兒都沒有碰到這二個檔案,既是如此,為什麼這一支 MIDP 應用程式可以執行呢?事實上,在 J2ME Wireless Toolkitt 尚未出現前,開發 MIDP 應用程式都是利用命令視窗下達命令的方式來完成,此時每一步驟都需要自己來做,MIDP 應用程式的 JAR 與 JAD 檔也是如此,不過我們目前是透過 J2ME Wireless Toolkitt 的 KToolbar 來完成時,這二個檔已經都由工具產生完成了!
當你在 Step3. 按下時,manifest/JAD 就已經被產生了!這個檔案被自動儲存在專案的 bin 目錄底下。
當你按下 Build 時,應該會有視窗出現,JAR/JAD 檔就是在此階段結束後自動產生的。
由此可知,所有的必要檔案都透過KToolbar 按鍵後產生,如果程式設計師需要修改這些 name-value 對時,可透過KToolbar 的設定視窗來設定。
在程式裡取用 MIDlet suite 的內容
程式設計師想要在程式裡取用 MIDlet suite 中的 manifest、JAD 檔及使用者使用的資源檔時,有二個方法可供使用:
一是javax.microedition.midlet.MIDlet.getAppProperty();二是java.lang.Class.getResourceAsStream ()。
底下我們來看一個例子。這個例子使用的是,事先己定義好的 name-value 對,如果程式設師想要使用自訂的 name-value 對時,應如何處理呢?下面是一個簡單的示範,不過其中用到了 Screen 為基礎的使用者介面的物件,各位如果還不能瞭解,可以在讀完相關章節後再翻回來過一遍。
Step1.準備一張圖片檔放在專案底下的 res 目錄,本例儲存在該目錄裡的圖檔名稱是 eclc_back.png。
Step2.點選,出現視窗。
Step3.點選 Optional 標籤。
Step4.點選後出現新增 name 的設定視窗。
Step5.輸入 ImageLocation 後按。
Step6.點選 ImageLocation 右邊的位置。
Step7.輸入圖片的位置及名稱。
Step8.按後離開。
Step9.輸入程式碼,參考(圖四)。最後執行結果。
結論與展望
本文在此將告一段落,希望在這二期的說明中,能夠帶給各位讀者朋友們一些關於利用 Java 完成行動通訊程式設計一些入門的觀念。
但這只是個起點而非結束。根據 IDC資料顯示,到了西元 2005 年,全球的行動電話將超過 14 億支;而 Gartner Group 的研究也預估,到了西元 2003 年,全球電子商務將有 40% 會透過行動商務來完成。隨著行動電話將深入每個人的生活,讓具有「無線通訊、隨身攜帶」特性的行動電話,伴隨網際網路的發展,使得行動商務( Mobile e-Commerce )前景無限。
行動商務係指消費者藉由電信網路並透過手持式無線通訊裝置,像是行動電話、個人數位助理等,來進行有形貨物或無形勞務的買賣、交換等各項具有貨幣價值的交易。藉由撰寫行動電話應用程式,讓行動電話使用者能夠透過行動電話的無線通訊功能來查詢銀行帳戶餘額、匯款、機票等各類票務預約、找停車位、下載音樂,乃至於線上遊戲等,都能夠為行動電話的使用者提供一個極其多樣化的服務內容,目前最成功的例子就是鄰近日本 NTT DoCoMo 的 i-mode 服務,最近中華電信推出的「全行動生活的 emome」也是一個重視行動電話應用的另一實例。
i-mode 的基本策略就是選擇業界標準的 Java 來作為程式語言。DoCoMo 與 Sun雙方在 1999 年 3 月 14 日宣佈攜手合作,並於距離宣佈合作後的三個月內,也就是同年的 6 月舉行的 Java One'99 會議中,公開試製機種,並針對與會的開發人員執行一些簡易程式的 demo。DoCoMo 並 且已於今( 2001 )年的 1 月推出 Java行動電話和 Java 行動電話服務。
除了 DoCoMo 的 Java 行動電話和Java 行動電話服務外,美國 Nextel Communication 也推出以 Java 2 Platform, Micro Edition ( J2ME )的 Mobile Information Device Profile ( MIDP )規格為基礎的 Motorola i85s 與 i50sx 行動電話。
而國內也已於今( 2001 )年 9 月推出了「太極」二代 A6288 中文雙頻 GPRS 手機,這是全球首支結合 GPRS 與 J2ME 跨平台技術的多功能中文 PDA 行動電話,讓使用者可直接利用 GPRS 上網,下載以 J2ME 為基礎的各式應用服務,如即時股市、高畫質遊戲、日程表工具、收支表等,豐富的動態多媒體特性,充份滿足行動電話用戶隨時擴充行動電話的機能,及無線下載的樂趣,使行動電話使用者不再侷限於出廠時的原始功能,而可依個人需求來配置具個人化色彩的功能,宛如擁有一支「活的行動電話」。
最後以 Sun 的設計師 David Rivas 的一句話來勉勵各位:"Write midlets... Write midlets right now"。其中 Midlet就是利用 J2ME 的 MIDP 規格所實作出來的應用程式( MIDP application ),這也是本文所要談論的主題。
(本文作者任職於屏東縣政府)