本人通過對M55通訊錄的文件格式做詳細的“解剖”,徹底分析出了通訊錄的內部格式構成,這樣我們就可以對通訊錄進行優化了,比如減肥、拼音查詢優化等等,這些都是用官方軟件所無法辦到的。
本文可以供西門子的愛好者參考,當然對懂得軟件編程的開發人員來說,我想應該是目前國內首次公開的關于M55寶貴的技術資料了,不知西門子會不會找我算賬……,^_^
本文是針對M55通訊錄做的研究,但同樣適合于西門子55系列的其他手機,如S57/SL55。
一、綜述
M55的通訊錄是由三個文件組成的,放在動態內存的Address book目錄下,這個目錄是隱藏的,所以通過手機的文件管理器是看不到的,但通過數據線借助電腦,用DES軟件可以清楚的看到這個隱藏目錄以及這個目錄里的四個文件,也是隱藏的。
這個四個文件為別為5f08.adr, 7f08.adr, 9f08.adr和.lock文件,有別于45系列(6618/3618/6688)通訊錄的5f02.adr, 7f02.adr, 9f02.adr,因為55系列(s57/sl55/m55)手機的通訊錄作了許多改進和升級。
其中5f08.adr是用來存放每一條通訊錄的具體內容的,按條逐次存放。我稱之為記錄文件。
7f08.adr里存放的是每一條通訊錄在5f08.adr文件中的地址,便于檢索。我稱之為索引文件。
9f08.adr是由手機動態生成的,事實上備份通訊錄只要拷貝前兩個文件就可以了。
.lock文件固定為0字節,對于我們研究和改進通訊錄沒有什么關系,不用管它。
二、M55通訊薄記錄文件格式(5f08.adr)
5f08.adr由文件頭和其后的通訊錄記錄構成:
(一)、文件頭: 68字節;
2字節:代表記錄頭中包含字段的數目,一般為29個字段,即總為1D 00;
2字節:代表記錄(電話)條目個數,比如若通訊錄中有18條記錄,則位12 00;
剩余64字節總是:
00 00 00 00 01 00 13 01 93 01 13 01 93 02 13 01
13 01 13 08 93 00 9A 01 9A 01 0A 02 4A 00 A9 00
A9 00 A9 00 A9 00 A9 00 08 00 08 00 08 00 08 00
08 00 82 00 14 00 24 00 35 00 08 00 08 00 3A 00
(二)、記錄:
每一條記錄都是由以下30個字段構成,其中的記錄頭記錄剩余29個字段的長度。
0.記 錄 頭:58字節,表示每條記錄各字段占空間的字節長度,用2個字節表示,依次為:
姓、名、公司、街道、城市、國家、來電圖片、備用(包括群組,名稱前6字)、電子郵件、電子郵件2、網址、郵政編碼、私人電話、公司電話、移動電話、傳真、傳真 2、五個電話存在標志、修改時間、內部識別號、生日重要記事地址、生日、備忘提示標志、語音撥號標記、檢索拼音等29項。共占用58個字節;
1.姓 :在中國固定為2字節,沒有使用這個字段,總為00 00。
2.名 字 :長度按實際字數計,最長50字節,UNICODE16碼(即不論是漢字還是英文,每個字都占兩個字節),最長為24個字,結束符為00 00。
3.公司名稱 :長度按實際字數計,最長34字節,UNICODE16碼,最長為16個漢字,結束符為00 00。
4.街 道 :長度按實際字數計,最長82字節,UNICODE16碼,最長為40個漢字,結束符為00 00。
5.城 市 :長度按實際字數計,最長34字節,UNICODE16碼,最長為16個漢字,結束符為00 00。
6.國 家 :長度按實際字數計,最長34字節,UNICODE16碼,最長為16個漢字,結束符為00 00。
7.來電圖片 :存放來電圖片在動態內存中的路徑,如A:/Pictures/Me.JPG,長度按實際字數計,長度幾乎沒有限制,UNICODE16碼,結束符為00 00。
8.備 用 :固定18字節,由群組類型和重復信息組成。
其中群組類型占頭2字節,30為名片、31為家人、32為朋友、33為同事、34為Vip、35為休閑玩伴、36為秘密好友、37為生意伙伴、38為物件接收、39為未設定群組,結束符為00。
然后是重復信息16字節,最多重復名字中的6個漢字,名字不足6個字的用00補足,最后4個字節總為00 00 00 00。
9.電子郵件 :長度按實際字數計,最長51字節,ASCII碼,最長50個字符,結束符為00,無該項時長度為1即只含結束符。
10.電子郵件2:長度按實際字數計,最長51字節,ASCII碼,最長50個字符,結束符為00,無該項時長度為1即只含結束符。
11.網 址 :長度按實際字數計,最長65字節,ASCII碼,最長64個字符,結束符為00,無該項時長度為1即只含結束符。
12.郵政編碼 :長度按實際字數計,最長9字節,ASCII碼,最長8個字符,結束符為00,無該項時長度為1即只含結束符。
13.私人電話 :長度按實際電話位數計,最長21字節,BCD碼(即一個字節可以記錄兩位號碼),號碼最長40位,奇數位電話以十六進制數F結束,偶數為FF。
如若電話為01012345678,則記為10 10 32 54 76 F8,如電話為0291234567,則記為20 19 32 54 76 FF。
14.公司電話 :長度按實際電話位數計,最長21字節,BCD碼,號碼最長40位,奇數位電話以十六進制數F結束,偶數為FF。
15.移動電話 :長度按實際電話位數計,最長21字節,BCD碼,號碼最長40位,奇數位電話以十六進制數F結束,偶數為FF。
16.傳 真 :長度按實際電話位數計,最長21字節,BCD碼,號碼最長40位,奇數位電話以十六進制數F結束,偶數為FF。
17.傳 真2:長度按實際電話位數計,最長21字節,BCD碼,號碼最長40位,奇數位電話以十六進制數F結束,偶數為FF。
18.私電標志 :固定1字節,FF為沒有私人電話,81為有。
19.公電標志 :固定1字節,FF為沒有公司電話,81為有。
20.移電標志 :固定1字節,FF為沒有移動電話,81為有。
21.傳真標志 :固定1字節,FF為沒有傳真,81為有。
22.傳真2標志:固定1字節,FF為沒有傳真2,81為有。
23.修改時間 :固定16字節,ASCII碼,格式為年月日8字節+'T'+時分秒6字節,結束符為00;如20030801T195803,代表該記錄是在2003/08/01的19:58:03做的最后修改。
24.內部標識 :固定2字節,二進制碼,每條通訊錄都不一樣。
25.重要記事地址:固定4字節,二進制碼,當創建了生日提醒時,則記錄重要記事的入口地址,沒有生日提醒則為00 00 00 00。
26.生 日 :固定6字節,正整數表示,日(2字節)月(2字節)年(2字節);如生日為1976/11/01,則記錄為01 00 0B 00 B8 07。
27.備忘提示 :固定1字節,01表示生日備忘提示打開,00表示關閉。
28.語音撥號標記:固定1字節,二進制第1位代表私電是否有語音撥號,為1代表有,0代表沒有;依次第2位代表公電,第3位代表移動電話,第4位代表傳真,第5位代表傳真2;如該條目的私電和移動電話有語音撥號記錄,則該字段為05;
29.檢索拼音 :最長7字節,ASCII碼,取姓名第一個字的拼音,最長長度為6,結束符為00;沒有則為1個字節00;如若名字為張三,則這里存放zhang的ASCII碼,為7A 68 61 6E 67 00 00。
若不計來電圖片路徑,總長最長為635個字節內,若考慮來電圖片路徑則每條記錄的總長不應該超過1024個字節。
三、M55通訊錄索引文件格式(7f08.adr)
7f08.adr由每條通訊錄記錄的索引構成,無其它內容。
索引:固定4字節,記錄通訊錄條目在5f08.adr中的偏移地址,每一個條目的格式為ww xx yy zz。
代表該條目在5f08.adr記錄文件中的偏移地址為zzyyxxww。最高位有特殊作用,即當最高位為1時表示該記錄已經刪除。
四、越來越胖的通訊錄
當對手機的通訊錄進行刪除時,手機只是簡單的把7f08.adr中該條目的最高為置為1,然后把5f08.adr對應地址空間全寫為DD,頭一字節寫為EE,表示此空間無效。
當對手機的通訊錄進行編輯時,如果存儲新編輯的條目需要的空間大于原來的空間時,手機是先把原記錄刪除(操作同上),然后在5f08.adr最后創建新的記錄。
如果以后添加新的條目則曾經被標記為DD的空間也不會在被利用了,只會在5f08.adr最后繼續添加新條目,這個限制是由Flash這種特殊的存儲介質限定的。
因此,如果你對你的通訊錄反復修改的話,5f08.adr文件內部會出現許多不能被再利用的空間(內部碎片),文件就會變的越來越“胖”。
五、笨拙的拼音檢索
M55的通訊錄如果按拼音排序的話,可以通過輸入拼音字母來檢索通訊錄條目,這個設計很好,但西門子的軟件人員沒有把它做的更好,檢索拼音只用了人名的第一個字“姓”的拼音來做檢索,這樣同姓的就會有大量的重復。如果能按人名的每個字的第一個拼音字母檢索就好了。
六、軟件預告
關于通訊錄“減肥”的和拼音檢索優化的軟件我已經編的差不多了,在我的手機上已經實現了,如要查找劉海濤,只需輸入lht,就可直接定位,我的通訊錄有150來條,這種拼音檢索幾乎沒有重復的,效率很高!
但還有一些東西要優化,估計最后的版本會在一個星期內就推出的。屆時我還會寫一個專題來討論,并無償給蝎友們提供這個軟件的使用權。歡迎大家使用并評測!敬請期待……
新聞熱點
疑難解答
圖片精選