摩托罗拉 ME525 改电池图标时得到的两点经验

2011年07月16日 01:07 | 来源:友人网 | 作者:tnt119
  • 摩托罗拉ME525
这几天为了整个能够精确显示电量的电池图标,杯具了无数次,好在Defy刷不死。 两三天折腾下来终于基本搞定了,中间有一些小经验,在此记录一下,供需要的兄弟查阅,避免杯具重演。  

    这几天为了整个能够精确显示电量的电池图标,杯具了无数次,好在Defy刷不死。


 

    两三天折腾下来终于基本搞定了,中间有一些小经验,在此记录一下,供需要的兄弟查阅,避免杯具重演。


 

    本文档说了两件事情:


 

    1. 修改10%电量显示图标(其实就是修改framework-res.apk文件,替换图片资源和编辑XML文件的方法),这个事情有很多人写过教程了,但是很多帖子不是很全,setp-by-setp地做还是会杯具,所以在此记录一下我自己验证过的做法;


 

    2.PC端编辑img文件,毕竟PC端操作效率高些,而且直接刷一个精简、美化完毕的img镜像,比刷完原版镜像再去精简的感觉还是要好一些。 


 

    对这两件事情没兴趣的兄弟就不用往下看了。 


 

    先说修改电量图标: 


 

    上张改图标之后的截图:


 

点击查看原图片!


 

    希望将来有高人能研究出不依赖其他软件实现1%电量显示的方法,从配置文件看来既然可以自定义maxLevel,应该不可能实现不了1%电量显示,不明白限制在哪里。 


 

    APK包其实是zip算法压缩的,这点和JAR一样,所以我们可以很方便地用WinRAR之类的压缩软件来打开APK,并且可以直接读取里面的图片资源。但是要实现10%电量显示,光替换图片是不够的,还需要修改XML文件,而直接通过压缩软件查看XML文件,发现不是ASCII文件,不能直接编辑,所以第一步是要反编译APK文件。


 

    这里需要用到apktool,请需要的兄弟自行google,apktool运行需要JRE,不明白什么是JRE的兄弟也请自行google,然后去Oracle网站下载安装。


 

    将原机的framework-res.apk拷贝到apktool目录下,命令行执行:


 

    apktool.bat d framework-res.apk


 

    在apktool目录下生成了一个叫做framework-res的文件夹,里面就是反编译出来的可读的东西。


 

    将framework-res.apk重命名为framework-res.apk.zip,等下会用到。


 

    stat_sys_battery.xml文件就是控制特定电量下调用特定图标的文件了,一共两个,一个在framework-res/res/drawable,一个在framework-res/res/drawable-hdpi,不知道真正起作用的是哪个,反正我两个都编辑了。编辑结果如下:


 

点击查看原图片!


 

    红色部分的maxLevel是指,电量下降到这个百分比的时候,去调用前面的这个图标文件。


 

    图标文件是png格式的,大家可以自己去网上找,去解包美化过的frameworks-res.apk也行,反正stat_sys_battery_0、5、10、15、20、30、40、50、60、70、80、90、100都要有,放在framework-res/res/drawable-hdpi下面就行了。


 

    然后重新用apktool打包,命令如下:


 

    apktool b frameworks-res frameworks-res.apk


 

    apktool就会重新把反编译出来的东西编译回去。但请千万注意,这个apk的包是不能替换到机器上去的,里面没有证书信息,直接替换上去包你陷入无尽重启的杯具。很多帖子这里都不交代清楚,我因此杯具了很多次。


 

    用WinRAR打开frameworks-res.apk和frameworks-res.apk.zip(注意后者才是原版),将前者的stat_sys_battery.xml(两个)拖放到后者的同路径下,并将stat_sys_battery_*.png的13个图片文件也拖过去(图片文件直接从外面拖进压缩包也行,但xml文件必须从编译好的apk文件拖),最后很重要:把前者第一层目录下的resources.arsc拖到后者的同路径下覆盖原文件,不然在手机上进行frameworks-res.apk替换后,电池图标将消失不见。


 

    总结一下:


 

    从新打包出来的文件拖放


 

    res/drawable/stat_sys_battery.xml


 

    res/drawable-hdpi/stat_sys_battery.xml


 

    res/drawable-hdpi/stat_sys_battery_*.png


 

    resources.arsc


 

    到原apk文件的相同路径下即可。 


 

    然后把framework-res.apk.zip传到SD卡上,重命名回framework-res.apk;


 

    用RE管理器将framework-res.apk复制到/system,更改权限为0777或至少0644(重要);


 

    然后把更改好权限的文件剪切到/system/framework,覆盖原文件;


 

    手机自动重启(万一没自启就手工重启下),就看到新的电池图标了。


 

    以上步骤请勿颠倒,否则容易出现无限重启的杯具。


 

    再说PC端编辑img文件的事:


 

    先说说img文件从何而来:


 

    1. 高人解包sbf文件的来原版的system.img;


 

    2. Defy Recovery软件备份系统得来的img文件,一般我们要编辑的也是system.img文件。


 

    用到的软件是这个:


 

点击查看原图片!


 

    过程很简单,用YAFFS2IMG浏览器打开system.img文件,该删的删,该替换的替换,当然这东西还有个很重要的用处:删错了什么系统服务需要恢复apk包的话,可用这种方法到img文件里头提取。


 

    新替换进去的文件注意要修改一下权限,右键需要改权限的文件,选“权限”即可:


 

点击查看原图片!


 

    参考其他文件的权限,有些镜像里头是0644的,有些是0777的,其实两种都行,主要是给所有用户读权限,但跟其他文件改成一样的心里舒服点。


 

    精简系统服务、替换字体、替换frmaeworks-res.apk都可以在这里面完成。完成之后点击“整理另存”,生成新的镜像,存的时候接受默认设置即可,如图:


 

点击查看原图片!


 

    下面有一点很重要,用新生成文件替换原system.img文件后,需要编辑与之同一路径的nandroid.md5文件。该文件记录了每个img文件的md5码,不修改的话,Defy Recovery恢复的时候会md5 checksum error,恢复不了。


 

    用WinMD5、Hash之类的软件得到新生成的system.img文件的md5码,然后用UltraEdit之类的支持Linux格式文本的编辑器打开nandroid.md5,替换system.img项的md5码,注意小写,不然比对的时候,Defy Recovery不认为大写和小写是一码事。这里用UltraEdit等比较专业的编辑器是因为Windows下的换行符和Linux下是不一样的(Android源于Linux),Windows自带的编辑器会破坏Linux换行符,但我没有测试Defy Recovery是否支持Win的换行符。另外,UltraEdit中将大写转化为小写也很方便,选中要转换的内容,Ctrl F5就行了。


 

    然后用正常的方法去恢复镜像就行了,恢复之后你会发现该精简的精简了,该替换的也替换了。不过如果因为过度精简造成系统进不去啥的请别找我,自己重新刷底包,再来过好了。 


 

    另:本文档中提及的所有软件都没法提供下载(因为没有空间,网盘又只能是临时的),请需要的兄弟自行使用万能的google查找。


 

    搞完收工,谢谢观赏。


 

    现在的效果是可以显示13档电量,分别为:


 

    0     5%  10%    15%    20%    30%    40%    50%    60%    70%    80%    90%    100%


 

    本来想做到1%精度的,无奈经过简单测试以及查阅资料,发现Defy最多就只能支持到这13档。


 

    但比原生的7档还是要精确一些的,有原XML配置文件为证:


 

 点击查看原图片!