初衷大概是我這學期剛修完Java程式,還頗有心得,加上我的傻瓜手機Sony Ericsson- C510 
(非智慧型,有按鈕的那種,最簡單型的 // 我不喜歡貝殼or滑蓋) 用了3年,直到今年3月底我生
 日才退役,現在自己辦了一支Sony- Experia P,下學期要修android,自己已借書看。

有人似乎會有疑問,為什麼這個時代還要研究這種程式?
我的想法是,現在的時代科技都是建立於前一個時代的基礎,因此當今的東西不能輕怠,過去的
更東西不能遺忘,如果時代想要去繼續向前進,總是要承先啟後的吧,掌握過去的技術,往未來
改進、突破!其實還有更大的動機是個人的興趣,想更了解過去我們玩過的手機遊戲、為什麼只
有與電腦傳檔的那支手機可以傳送遊戲給其他人,其他接受到遊戲的手機無法繼續傳送給更多的
人?大概就是以這些好奇心為原動力,開啟了個人的小小Java程式實驗吧!
 
恩,離題了。





 


綜合以上動機,於是乎我開始著手研究傻瓜手機的Java程式。


第一個著手點的想法,就是去找一個Java手機遊戲的安裝檔,副檔名為「.jar」,屬於
Java Archive、是Java的歸檔文件,可將一群Java的class檔及相關註解檔(MF檔)合成一個壓縮
 文件,用一般的解壓縮軟體(例如: WINRaR)就可以解壓縮,若想要執行的話,要先擁有JRE
(Java Runtime Environment),然後要用javaw.exe這個程式,讓JAR與javaw.exe形成關聯後,
就可以滑鼠雙擊打開JAR。

JAR的相關介紹: 
維基百科http://en.wikipedia.org/wiki/JAR_(file_format) 
百度百科 http://baike.baidu.com/view/50457.htm





於是我上網開始搜尋舊版手機的遊戲,才發現這是真正的考驗,因為許多過去以手機遊戲聞名
的網站不是關閉了,就是改發行android或ios的遊戲,雖然android也需要java撰寫成,但是其
遊戲包裝後是副檔名稱為.apk的檔案,並不是我要找的Jar。

有一種物是人非的感覺,一個時代進步快速的節奏!
 
點了好幾個「手機巴士」的網頁都開啟不了,可能是換伺服器(或者換位置了),終於翻了幾頁
搜尋後,順利進入到手機巴士裡面,選擇型號「sony ericsson - J10 ELM」載到了一個jar的
遊戲。
補充介紹apk,和jar其實地位差不多,許多性質也差不多,只不過apk是用於android系統上的,
至於會相似的原因是因為android根本也是用Java的技術寫出來的,本是同根生。

APK:
維基百科 http://zh.wikipedia.org/zh-tw/APK













找到了Jar之後要幹嘛?當然需要一個Java class檔的反編譯程式(decompiler),網路上找一下都
會有,我找到的是「DJ JavaDecompiler 3.9」。
在這邊順便來個反編譯的道德感教學以及個人使用反編譯程式的聲明:
    1. 基於智慧財產權,我不會藉由反編譯程式來侵犯他人的智慧結晶。
    2. 使用反編譯程式此一行為,是為了學術研究的使用,藉之學習java程式語言在行動裝置
        上的撰寫方式以及程式再行動裝置上的運作和執行。
    3. 反編譯之後的程式碼,僅供參考、為個人學習程式之範本,不會有盜用的行為。
    4. 使用反編譯程式的目的,絕非營利、且反編譯的程式碼絕不會公開。
其實就算弄到反編譯之後的code,想要還原原先的程式還是非常不容易的,因為為了反制反編譯
,很多的code編譯成byte code之後還會經過混淆器,打亂常數池(constant pool)裡面的命名,不
只讓每個函式或者變數看不出用途,有時候還會增加一點無用的函式或者變數混淆視聽,並且會以
無意義的英文字母為變數和函式命名,以增加反編譯的困難度,這也是對智慧財產的一種保護機制。

相關反編譯資料:
http://www.ithome.com.tw/itadm/article.php?c=32297







 





  
接著藉由研究反編譯出來的程式碼(雖然我下載的遊戲Java程式也被混淆器改造過),但是還是可以
看出需要使用到什麼樣的Java Class,進而可以從網路上輸入對的關鍵字,自行找出更多編輯程式
的必要資訊。
因此我發現了MIDlets這個Class<javax.microedition.midlet>,MIDlet應用程式似乎就是手機版本的
執行程式,依我的觀察看來跟Applet程式的性質和運作方式似乎有某些類似的概念,更從他的英
 文全名可見一斑((Mobile  Information Devices applet)) ,也因此該程式應該也會尊造某些特
定的函示順序來執行程式,我收集到的資料有以下這幾個主要掌握程式壽命(Lifecycle)的函式:
startApp()、pauseApp()、DestroyApp()。更清楚的說明如下圖:
 


圖片來源以及更多MIDlet資訊:
http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/javax/microedition/midlet/package-summary.html












 
找到了javax.microedition.MIDlet之後,我這才發現我所擁有的Java SE無法支援他,因為這個東東根本就是
Java ME (mobile行動裝置 所使用的Java)提供的Package/Class,所以只好自己去想辦法安裝Java ME,以
及模擬手機程式執行的模擬器,安裝的過程如下圖示。關於J2ME 和模擬器這部分,我覺得以下部落格給我
很大的幫助,在這邊對這位前輩表示感謝和尊敬,謝謝他的指教!
 
參考部落格:http://tw.myblog.yahoo.com/jw!bUg682iTQUJt4jPr4TVFiuqCJepC/article?mid=70





首先當然要先到Oracle的官網下載區,找到J2ME的載點。
1. 先同意授權
2. 再選擇下載版本,第二、三項是不同IDE的插件。
http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/index.html
 


 
安裝好J2ME SDK之後,我們還需要一個模擬器,載點如下:
http://www.oracle.com/technetwork/java/download-135801.html

 (另外,要下載這個模擬器似乎要辦一個Oracle帳號,就可以免費下載
// 抱歉,我也是跟著部落格教學的做,才會下載這個模擬器,只不過版本不同,我是尋找最新版本)




 
 
接著來測試第一支Java ME手機程式──Hello World !!!



 

初始畫面。




建立一個新專案,MIDlet的Class name需要與等一下要建立的java檔、Class檔同名。



 
於是我建立了一個專案叫做「PhoneGameTest」,他的專案路徑為:C:\Users\user\j2mewtk\2.5.2\apps\PhoneGameTest
然後用資料夾開啟這個路徑之後,找到裡面的「src」資料夾,我們要在裡面新增一個「PhoneGameTest.java」的java檔。

code大概如下:


再來就是compile,只要點下WTK的build按鈕就可以了!
只要出現「Build Complete」就表示專案建立完成,如果還有bug則會顯示「build failed」。

 


最後執行的時候,請按「run」。
就會出現手機環境模擬器。




模擬結果:
















 



最後附註一下,textbox建構子裡面的最後一個參數。
textbox屬於javax.microedition.LcdUi這個Package裡面的一個物件,最後一個參數表示輸入值的限制。
 
          tb = new TextBox("HelloWorld","",15,TextField.UNEDITABLE); TextField.UNEDITABLE -> 表示無法再編輯


更多相關資訊請參考Java docs:
(下載版的docs是在以下資料夾內有textbox相關介紹)
  /Java_ME_platform_SDK_3.2/docs/api/midp-2.0/javax/microedition/lcdui/TextField.html#constraints



arrow
arrow
    全站熱搜

    momo-牛牛 發表在 痞客邦 留言(0) 人氣()