爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 7271|回复: 1
收起左侧

[转帖]西门子M55通讯录内部格式之彻底解剖&减肥与查询优化----转自手机快刀手

[复制链接]
发表于 2005-8-7 00:00:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
这几天有机友在讨论通讯录减肥的事,我就把手机快刀手前辈的文章转帖一下吧,希望给机友们带来方便!
这是手机快刀手开发的两款通讯录整理软件,(S57不要使用,否则会开不机)
1.ADDRESS55,由前辈手机快刀手开发,非常方便。使用方法见压缩包。
[upload=rar]viewfile.asp?ID=14352[/upload]

2.SAB1.0:由手机快刀手开发
[upload=rar]viewfile.asp?ID=22438[/upload]
注意使用方法:
1.解压SAB1.0.rar软件包;
2.运行reg.bat来注册控件;
3.运行sab.exe就可以启动SAB了
************************************
以下文章来自手机快刀手
西门子M55通讯录内部格式之彻底解剖
本人通过对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来条,这种拼音检索几乎没有重复的,效率很高!
但还有一些东西要优化,估计最后的版本会在一个星期内就推出的。届时我还会写一个专题来讨论,并无偿给蝎友们提供这个软件的使用权。欢迎大家使用并评测!敬请期待……
西门子55系列通讯录的减肥与查询优化
上一篇文章已经详细地阐释了M55通讯录的内部格式,并基于这些格式的研究提出了减肥和查询优化的愿望,今天这个愿望就可以美梦成真了,我给大家带来了Address55软件,通过它不仅可以达到通讯录减肥和优化查询的目的,而且还可以灵活的编辑通讯录,省去用手机小小的键盘蜗牛式地输入了。同时文章中也会提到许多技巧和原理,由于本人文采一般,所以从现在起睁大眼珠啦…… ^_^
    一、通讯录编辑的总体流程

    1.拷贝手机通讯录到电脑中
    首先通过数据线连接电脑和手机。
    打开桌面上的mobile图标,即DES数据交换软件。有关手机和电脑互连传文件的具体使用方法参考我前面发表的文章《和电脑互连玩转M55》。
    将手机里address book隐藏目录下的5f08.adr和7f08.adr两个通讯录文件拷贝到电脑中。

    2.在电脑中编辑生成新的通讯录文件
    利用软件Address55对通讯录进行编辑,达到查询优化、减肥等等目的,然后生成新的通讯录文件。
    如果我们从电脑直接编辑新的通讯录就没有第1步了,直接用Address55编辑生成新的通讯录文件即可。

    3.将新的通讯录文件传回手机
    这里注意:如果把我们新生成的5f08.adr和7f08.adr直接传回到手机里覆盖原来的两个文件,会提示文件拒绝访问错误。
    因为手机在开机时,5f08.adr和7f08.adr这两个文件是受系统保护的,不能覆盖,当然也删不掉,所以我们需要使一点儿小技巧:
    首先把手机里的三个文件5f08.adr、7f08.adr和9f08.adr改名,任意名称都可以。注意9f08.adr也要改名,不能保留。
    然后把我们新生成的通讯录文件5f08.adr和7f08.adr拷到手机里。
    这样就不会提示出错了。

    4.使新的通讯录生效
    为了使新的通讯录生效,必须要关机再开机。
    这里一定要注意的是:
    当重新开机时,你肯定不会立刻听到开机音乐,不用管只需确认飞机检查即可,然后所要做的就是等待……,这时手机在初始化通讯录,这一段时间最好不要动手机,虽然可以操作手机,但这样会造成手机初始化通讯录更慢。然后一段时间的等待后,你会不经意间突然听到开机音乐响了,这表明手机的所有初始化工作完成了,当然包括通讯录初始化。这时你就可以看看你的通讯录是否正常了。等待的时间取决与你的通讯录里条目的多少。
    其实手机初始化通讯录就是因为手机探测到5f08.adr和7f08.adr文件但没有9f08.adr文件,手机就会自动根据5f08.adr和7f08.adr两个文件来生成9f08.adr文件,对于通讯录条目比较多的需要花好长一段时间来初始化通讯录。当然正常的开机情况手机可以检测到9f08.adr文件,所以初始化通讯录的时间会很快。

    5.清理垃圾
    就是通过DES把address book目录里我们刚才改过名的旧的三个通讯录文件删掉即可。重新开机后旧的改过名的那三个通讯录文件就可以删掉了,因为手机把写保护加到了我们新生成的通讯录文件上。
    当然由于本软件是初次公布,有待于大家的评测,所以出于安全的考虑,你可以先保留那几个旧的文件不要删掉,等新的通讯录使用几天后觉得没问题了,再删也不迟。否则再把名字改回来恢复即可。不过经过我的详细测试,本软件到目前为止(2003/08/18)还是没有问题的。
    在这里顺便提一下为什么M55开机反应比较慢的原因:由于西门子的机子现在功能日趋详尽,操作系统也变的日益复杂,所以当硬件没有很大的提升时,系统初始化、执行大的应用程序的时间就会明显加长。所以当开机时,手机的操作系统要做许多工作,预读通讯录、短信、壁纸、待机图等等,花费的时间会长一点儿,所以建议开机后不要立刻操作手机,等大约半分钟的时间再操作手机就会比较流畅了。假如急着操作的话,就可能出现壁纸不能正常显示,导致启动时间反而更长等现象。
    二、Address55软件的构成
    主要有两个文件,把压缩包解开就看到了:
    address55.exe,软件的主执行程序
    mfc70.dll,系统的动态连接库,这个文件如果你的机子装过.net开发平台就不需要了。
    安装时任意建立一个目录,把这两个文件放进去就行了。
    执行Address55选择address55.exe就可以了,你也可以在桌面建立一个快捷方式。执行后的界面如下图:
[upload=jpg]UploadFile/2004-9/20049416342857.jpg[/upload]
三、如何用Address55编辑通讯录
    1.新建或打开通讯录
    对于修改原有通讯录文件的情况:
    首先选【打开】来选择你从手机里拷过来的文件,选5f08.adr和7f08.adr中任意一个即可。
    然后选【读入】就可以把原来的通讯录条目读进来了显示在列表里。
    对于建立新的通讯录的情况:
    只需选【新建】就可以了。
    2.编辑通讯录
    在软件的上面依次列出了编辑通讯录的五个常用按钮【添加】、【插入】、【上移】、【下移】、【删除】。
   【添加】就是在现有通讯录的底部增加一条新的通讯录。
   【插入】就是在当前条目的前面插入一条新的通讯录。当前条目通过鼠标点击序号一列来选择。
   【上移】就是把当前条目的位置上移一个。
   【下移】就是把当前条目的位置下移一个。
   【删除】就是一次性删除选择的条目。选择条目通过鼠标点击条目前面的小框框来选择。
    3.优化拼音查询
    在手机里当按拼音排序时,你可以输入字母来定位通讯录条目,但不是很完美。因为你在拼音检索这一栏可以发现M55为每一条通讯录条目生成的检索用的字母都是姓名第一个字的拼音,这样必然存在大量的重复,比如姓刘的我的手机里就有十几个,找起来很麻烦。还有当我们用西门子官方的通讯录同步软件SDS来同步通讯录到手机时会有许多条目的拼音检索这一项是空的。因此我们有必要自己定义查找某一条通讯录时需要输入的字母。
    在拼音检索这一栏里可以输入任意的字母序列,如abc,这样在手机里查找条目时直接输入abc就可以定位到这个条目了。当然拼音还得你自己输,在编程序时通过汉字知晓拼音的首字母还挺麻烦,所以这个工作就留给你了。虽然是可以输入任意的字母(注意不要输入汉字),但为了自己好记忆,我推荐输入姓名每个字的拼音的第一个字母,比如刘海涛,你就输入lht。另外注意最多4个字母,虽然通讯录里最多可以存6个字母的拼音检索码,但我们在手机里查找时最多可以输入4个字母,所以写多了也没有用。
    4.有关群组的选择
    由于手机里关于群组的名称没有存在通讯录里,在通讯录里只是简单的存储了群组的序号,对应关系为30为名片、31为家人、32为朋友、33为同事、34为VIP、35为休闲玩伴、36为秘密好友、37为生意伙伴、38为物件接收、39为未设定群组共十种。其中名片只能有一条,物件接受不能自己设定。所以我的Address55软件也不知道到你把群组名称改成什么样子了,因此我在设计软件时,使用的群组名称是默认的名称。
    当你要改变群组时,点击群组一栏,会弹出下拉列表选择框,里面依次列出了名片、家人、朋友、同事、VIP、休闲玩伴、秘密好友、生意伙伴、未设定群组九个选项,只要按顺序选择就可以了。即如果你把“家人”的群组改名叫做“亲戚”,你在选择群组时只要选择“家人”就可以了,当新的通讯录传回手机后,手机会自动按群组序号把那个条目归类到“亲戚”里的。
    5.其他编辑注意事项
    Address55软件没有对一些字段的输入做限制,但为了能使手机正常识别,请按下列规则填写:
    1).拼音检索一项只能输入字母,不能时汉字;
    2).所有的电话号码只能输入0-9以及 * # ? + 四种符号;
    3).拼音检索、电子邮件、网址、邮政编码等不要输入汉字;
    4).生日一项按类似于 1980/08/02 这样的形式填写;
    5).来电图片为图片在手机动态内存中的路径,盘符是A,最好在手机中来选择图片路径,这样不容易输错路径名。
    6.生成新的通讯录,同时实现“瘦身计划”
    当编辑完通讯录后,就可以点击【生成】按钮生成新的通讯录文件了,新的通讯录文件放在当前目录下的new子目录里。
    在M55上编辑通讯录时,文件5f08.adr只会增大而不会减小,原因这里再重提一次:
    当对手机的通讯录进行删除时,手机只是简单的把索引文件7f08.adr中该条目的最高位置为1,然后把5f08.adr对应地址空间全写为DD,表示此空间无效。当对手机的通讯录进行编辑时,如果存储新编辑的条目需要的空间大于原来的空间时,手机是先把原记录删除(操作同上),然后在5f08.adr最后创建新的记录。如果以后添加新的条目则曾经被标记为DD的空间也不会再被利用了,只会在5f08.adr最后继续添加新条目,这个限制是由Flash这种特殊的存储介质限定的。因此,如果你对你的通讯录反复修改的话,5f08.adr文件内部会出现许多不能被再利用的空间(内部碎片),文件就会变的越来越“胖”。
    因此我在生成新的通讯录的同时就把那些没用的空间又找了回来,这样就可以达到“瘦身”的目的。
    另外如果在生成新的通讯录的时候出现一些不能创建文件的提示时,请人工把那个目录下的new目录删除,再来一遍即可。
    四、Address55软件的获取
    Address55软件是完全免费的,欢迎大家使用,并提出宝贵的意见,我会不断的更新以求完美。
    如果谁需要可以发邮件到M55Scorpion@163.com,我每天晚上会去查看回复,并附上Address55软件的。
    有关M55的其他问题,大家也可以通过这个邮箱和我交流。也希望大家积极投身到研究M55的“运动”中来,因为我们喜欢小蝎,我们是siemens的Fans。

[转帖]西门子M55通讯录内部格式之彻底解剖&减肥与查询优化----转自手机快刀手

[转帖]西门子M55通讯录内部格式之彻底解剖&减肥与查询优化----转自手机快刀手
发表于 2006-5-9 02:12:53 | 显示全部楼层
楼主,,,能不能说说M65的?????谢谢!


西门子M55通讯录内部格式之彻底解剖&减肥与查询优化----转自手机快刀手
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2025-6-22 17:16

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表