這幾天為了整個能夠精確顯示電量的電池圖標,杯具了無數(shù)次,好在Defy刷不死。
兩三天折騰下來終于基本搞定了,中間有一些小經(jīng)驗,在此記錄一下,供需要的兄弟查閱,避免杯具重演。
1. 修改10%電量顯示圖標(其實就是修改framework-res.apk文件,替換圖片資源和編輯XML文件的方法),這個事情有很多人寫過教程了,但是很多帖子不是很全,setp-by-setp地做還是會杯具,所以在此記錄一下我自己驗證過的做法;
2.PC端編輯img文件,畢竟PC端操作效率高些,而且直接刷一個精簡、美化完畢的img鏡像,比刷完原版鏡像再去精簡的感覺還是要好一些。
對這兩件事情沒興趣的兄弟就不用往下看了。
先說修改電量圖標:
上張改圖標之后的截圖:
希望將來有高人能研究出不依賴其他軟件實現(xiàn)1%電量顯示的方法,從配置文件看來既然可以自定義maxLevel,應該不可能實現(xiàn)不了1%電量顯示,不明白限制在哪里。
APK包其實是zip算法壓縮的,這點和JAR一樣,所以我們可以很方便地用WinRAR之類的壓縮軟件來打開APK,并且可以直接讀取里面的圖片資源。但是要實現(xiàn)10%電量顯示,光替換圖片是不夠的,還需要修改XML文件,而直接通過壓縮軟件查看XML文件,發(fā)現(xiàn)不是ASCII文件,不能直接編輯,所以第一步是要反編譯APK文件。
這里需要用到apktool,請需要的兄弟自行google,apktool運行需要JRE,不明白什么是JRE的兄弟也請自行google,然后去Oracle網(wǎng)站下載安裝。
將原機的framework-res.apk拷貝到apktool目錄下,命令行執(zhí)行:
apktool.bat d framework-res.apk
在apktool目錄下生成了一個叫做framework-res的文件夾,里面就是反編譯出來的可讀的東西。
將framework-res.apk重命名為framework-res.apk.zip,等下會用到。
stat_sys_battery.xml文件就是控制特定電量下調(diào)用特定圖標的文件了,一共兩個,一個在framework-res\res\drawable,一個在framework-res\res\drawable-hdpi,不知道真正起作用的是哪個,反正我兩個都編輯了。編輯結(jié)果如下:
紅色部分的maxLevel是指,電量下降到這個百分比的時候,去調(diào)用前面的這個圖標文件。
圖標文件是png格式的,大家可以自己去網(wǎng)上找,去解包美化過的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替換后,電池圖標將消失不見。
總結(jié)一下:
從新打包出來的文件拖放
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,覆蓋原文件;
手機自動重啟(萬一沒自啟就手工重啟下),就看到新的電池圖標了。
以上步驟請勿顛倒,否則容易出現(xiàn)無限重啟的杯具。
先說說img文件從何而來:
1. 高人解包sbf文件的來原版的system.img;
2. Defy Recovery軟件備份系統(tǒng)得來的img文件,一般我們要編輯的也是system.img文件。
用到的軟件是這個:
過程很簡單,用YAFFS2IMG瀏覽器打開system.img文件,該刪的刪,該替換的替換,當然這東西還有個很重要的用處:刪錯了什么系統(tǒng)服務需要恢復apk包的話,可用這種方法到img文件里頭提取。
新替換進去的文件注意要修改一下權限,右鍵需要改權限的文件,選“權限”即可:
參考其他文件的權限,有些鏡像里頭是0644的,有些是0777的,其實兩種都行,主要是給所有用戶讀權限,但跟其他文件改成一樣的心里舒服點。
精簡系統(tǒng)服務、替換字體、替換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等比較專業(yè)的編輯器是因為Windows下的換行符和Linux下是不一樣的(Android源于Linux),Windows自帶的編輯器會破壞Linux換行符,但我沒有測試Defy Recovery是否支持Win的換行符。另外,UltraEdit中將大寫轉(zhuǎn)化為小寫也很方便,選中要轉(zhuǎn)換的內(nèi)容,Ctrl F5就行了。
然后用正常的方法去恢復鏡像就行了,恢復之后你會發(fā)現(xiàn)該精簡的精簡了,該替換的也替換了。不過如果因為過度精簡造成系統(tǒng)進不去啥的請別找我,自己重新刷底包,再來過好了。
另:本文檔中提及的所有軟件都沒法提供下載(因為沒有空間,網(wǎng)盤又只能是臨時的),請需要的兄弟自行使用萬能的google查找。
搞完收工,謝謝觀賞。
現(xiàn)在的效果是可以顯示13檔電量,分別為:
0 5% 10% 15% 20% 30% 40% 50% 60% 70% 80% 90% 100%
本來想做到1%精度的,無奈經(jīng)過簡單測試以及查閱資料,發(fā)現(xiàn)Defy最多就只能支持到這13檔。
但比原生的7檔還是要精確一些的,有原XML配置文件為證: