本人在使用52和藍色上提供的JAVAGAME 工具制作游戲S3文件刷機的過程中,發現有些游戲刷了后,手機出現打電話時 自動重啟等不正常現象,刷回原版的游戲后一切就正常了。比如,下面這4個游戲,我用JAVAGAME 工具生成的:(4個游戲分別是美女麻將,摩托,YOYO 和 超級沙羅曼蛇
但當我將這個S3文件刷進手機后,發現打電話時頻繁會出現 重啟 的現象,而且有時 關機時也會重啟!還原游戲后,這個現象就再沒有出現了,因此肯定是刷游戲出的問題。
那這是什么原因呢? 網友們很多都認為 可能是單個游戲太大的緣故!所以建議:單個游戲不要超過100,而4個游戲的刷機S3文件不能超過900K等等。 但通過我對 原版BIN文件中 4個原版游戲的分析,發現: 4個原版游戲的替換空間是從:0x00E8CF94 到 00EE5CEC 的(針對E318的 L3版本),總大小是363864 字節, 地址空間的具體分配情況如下:
001 : 0x00E8CF94 - 0x00E8D08E 大小: 251 第一個游戲的JAD 文件
002 : 0x00E8D08F - 0x00EA53F3 大小: 99173 第一個游戲的JAR 文件
003 : 0x00EA53F4 - 0x00EA54E0 大小: 237 第二個游戲的JAD 文件
004 : 0x00EA54E1 - 0x00EB56E1 大小: 66049 第二個游戲的JAR 文件
007 : 0x00EB56E2 - 0x00EB57DD 大小: 252 第三個游戲的JAD 文件
008 : 0x00EB57DE - 0x00ECE0A1 大小: 100548 第三個游戲的JAR 文件
005 : 0x00ECE0A2 - 0x00ECE15A 大小: 185 第四個游戲的JAD 文件
006 : 0x00ECE15B - 0x00EE5CEC 大小: 97170 第四個游戲的JAR
所以,我生成的有問題的S3文件大小肯定是沒問題的(S3地址范圍在上述地址范圍內),另外如果超出大小,JAVAGAME工具也會報錯的。那是什么原因呢??
我們知道,JAVA 的 J2ME框架(也就是J2SE的簡化版)是SUN公司推出的針對嵌入式消費類電子產品的開發平臺,目前在手機上應用的非常廣泛,而我們的318就是支持JAVA的,運行的就是 J2ME ,遵循MIDP 2.0規范,采用獨立的統一的跨平臺的游戲開發包javax.microedition.lcdui.game。
因此,JAVA游戲 在手機上運行 一樣會涉及到 游戲的大小、主存儲空間、并行存在的線程數量等方面的限制,和PC上的JAVA程序運行應該是一樣的道理,PC上JAVA 運行內存大小是64M,而手機上要小的多,幾十K到幾百K都有,各個廠家定義的大小不一,所以我想 除了游戲大小可能導致出錯之外,也有可能是 游戲運行占用的內存超出了手機可以提供的JAVA主內存,一樣也會導致出錯了。因為一方面 三星在開發318軟件時,在內存緊張的情況下 當然是以原版的4個游戲為準 設計JAVA的運行內存的,很有可能不是很大;另一方面,實踐證明,用JAVAGAME程序生成的4個游戲的大小肯定是小于原版游戲總大小的(BIN文件:363465字節),否則JAVAGAME程序會提示出錯的,那為什么有些游戲太大了會導致手機出故障呢?我想,那就可能是游戲占用的內存太多的緣故,已經超過了原有的分配的內存大小了。
因此,我又將4個游戲重新生成S3文件,但第二個游戲我換成了占用內存很小的游戲:吃豆子(17K),如圖
然后我將這個S3文件刷機手機,一切都很正常,再也沒有出現無故重啟的現象了,關機也正常了。
所以,我想,刷游戲失敗的時候,除了考慮4個游戲大小不要超過總大小之外,還要考慮到是否其中某幾個游戲占用了太多的內存(一般,復雜的游戲占用內存更多些),此時可以適當將某個游戲替換成 簡單一些的游戲,重新刷機,問題可能就解決了。
上述都是我的個人見解,只是從另外一個角度分析了一下318的游戲刷機問題,希望能起到一點拋磚引玉的作用。