• 2

[APK反編譯教學]電量百分比DIY

因為NEO NO1官方 4.0.3 ROM
只支援顯示
0.15.28.43.57.71.85.100
秉持著龜毛的心態
就是要讓他顯示1%
於是開始了這次的反編譯

如果你不知道怎麼反編譯
可能就不適合這篇的教學
(2.3.6的電量顯示並不在SystemUI.apk這個檔案,而是在framework-res.apk)
以下教學都是使用NEO NO1官方4.0.3 ROM的檔案去做操作

首先將官方的SystemUI.apk反編譯
然後今天需要修改的檔案分別是
/res/drawable/stat_sys_battery.xml
/res/drawable/stat_sys_battery_charge.xml
/res/values/public.xml
先大至說明一下

stat_sys_battery.xml
這檔案的用途是告訴系統
電量多少時
要顯示哪一個資源圖示檔

stat_sys_battery_charge.xml
這檔案用途是顯是充電時
動畫圖檔

public.xml
描述所有資源ID

首先先從簡單的開始
原始的stat_sys_battery.xml是這樣顯示
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="4" />
<item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" />
<item android:drawable="@drawable/stat_sys_battery_28" android:maxLevel="35" />
<item android:drawable="@drawable/stat_sys_battery_43" android:maxLevel="49" />
<item android:drawable="@drawable/stat_sys_battery_57" android:maxLevel="60" />
<item android:drawable="@drawable/stat_sys_battery_71" android:maxLevel="75" />
<item android:drawable="@drawable/stat_sys_battery_85" android:maxLevel="90" />
<item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
</level-list>

這裡就是說明了
電量不到4%時都使用@drawable/stat_sys_battery_0這個資源圖示
但現在我們要它精準顯示
所以這個檔案要改成
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="0" />
<item android:drawable="@drawable/stat_sys_battery_1" android:maxLevel="1" />
<item android:drawable="@drawable/stat_sys_battery_2" android:maxLevel="2" />
(中間部分請類推)
<item android:drawable="@drawable/stat_sys_battery_99" android:maxLevel="99" />
<item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
</level-list>

這麼一來
這個檔案部分就已經完成了

接下來
充電動畫在這個檔案
stat_sys_battery_charge.xml
這是原本的檔案內容
其實不改也OK
<item android:maxLevel="4">
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="2000" android:drawable="@drawable/stat_sys_battery_charge_anim0" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim15" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim28" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim43" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim57" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim71" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim85" />
<item android:duration="1000" android:drawable="@drawable/stat_sys_battery_charge_anim100" />
</animation-list>
</item>
以下省略

這邊表示電量在4%以下
充電動畫圖是分別會播放的圖示資源檔
這邊就不在說明了
因為不改其實也不沒差

這次修改最關鍵的地方來了
也是最需要耐心的地方
我自己就在這邊碰壁好幾次
public.xml
這個檔案主要是告訴機器
程式擁有的資源檔編號
原始的檔案應該是這樣
<public type="drawable" name="stat_sys_battery_0" id="0x7f020066" />
<public type="drawable" name="stat_sys_battery_100" id="0x7f020067" />
<public type="drawable" name="stat_sys_battery_15" id="0x7f020068" />
<public type="drawable" name="stat_sys_battery_28" id="0x7f020069" />
<public type="drawable" name="stat_sys_battery_43" id="0x7f02006a" />
<public type="drawable" name="stat_sys_battery_57" id="0x7f02006b" />
<public type="drawable" name="stat_sys_battery_71" id="0x7f02006c" />
<public type="drawable" name="stat_sys_battery_85" id="0x7f02006d" />
<public type="drawable" name="stat_sys_battery_charge_anim0" id="0x7f02006f" />
<public type="drawable" name="stat_sys_battery_charge_anim100" id="0x7f020070" />
<public type="drawable" name="stat_sys_battery_charge_anim15" id="0x7f020071" />
<public type="drawable" name="stat_sys_battery_charge_anim28" id="0x7f020072" />
<public type="drawable" name="stat_sys_battery_charge_anim43" id="0x7f020073" />
<public type="drawable" name="stat_sys_battery_charge_anim57" id="0x7f020074" />
<public type="drawable" name="stat_sys_battery_charge_anim71" id="0x7f020075" />
<public type="drawable" name="stat_sys_battery_charge_anim85" id="0x7f020076" />


這部分是原本宣告的資源(只截取電量有關的部分)
應該都發現了
原本的檔案它只宣告了0.15.28.43.57.71.85.100這幾個圖示
所以無論你丟了多細的圖示
機器還是只認得這幾個圖示
所以我們就手動補上其他缺的圖示吧
首先1%的話
就加上這段
<public type="drawable" name="stat_sys_battery_1" id="0x7f0201a9" />
有人會想說
0x7f0201a9是怎麼來的
這ID其實不能亂取
我本來以為找不重複的就好
偏偏編譯的時候都會出錯
後來只好乖乖的來
將整篇宣告的ID都看一遍
找出最後的一個數字
以官方檔案來說
最後一個是0x7f0201a8
所以我就由0x7f0201a9開始使用
然後就一直把缺少的補上去
stat_sys_battery_charge_animXX也是一樣
想偷懶的話可以只補整數
看你會不會在意充電動畫的細緻度
補完之後
記得將百分比的圖示丟進 /res/drawable-hdpi 裡面
缺圖示編譯回來時一樣報錯
接下來就編譯回APK吧

編譯好了之後
請不要直接將編譯好的SystemUI.apk覆蓋到系統
請將原本的SystemUI.apk跟美化過的SystemUI.apk都用WINRAR開啟
接下來
請將美化過的SystemUI.apk裡的resources.arsc複製到原本的SystemUI.apk裡面

複製時注意一下這個選項
壓縮方式選 僅儲存
[APK反編譯教學]電量百分比DIY

檔案路徑請選擇 不要儲存路徑
[APK反編譯教學]電量百分比DIY

接下來請將電量百分比的圖示
丟進去原本的SystemUI.apk /res/drawable-hdpi裡面
壓縮方式跟檔案路徑一樣依照圖片選

然後丟進手機的/system/app
權限是644
接下來重新開機
如果有開啟快速啟動
請拔掉電池重開機
或是利用ADB命令讓機器重開機
就可以發現你的手機也支援百分比顯示到1%

[APK反編譯教學]電量百分比DIY

附上修改過的SystemUI.apk
請注意
這檔案只適合NEO NO1版本號A51B_NEO_F4
不喜歡我放的圖示只要利用WINRAR開啟SystemUI.apk
再將圖示放進去就可以了
不需要反編譯

附帶說明一下
這個Settings.apk跟原廠不同的地方有
電池圖示跟鬧鐘圖示以及電量改到精準1%
[APK反編譯教學]電量百分比DIY
[APK反編譯教學]電量百分比DIY

附加壓縮檔: 201208/mobile01-59778537e4f496f26da3e4cf4eb8ef78.zip
2012-08-28 1:19 發佈
感謝大大辛苦的教學文章~~

我也是用尼奧N01~~

我不會反編譯,只要直接套上你改好得SystemUI.apk就可以了嗎?

pispol wrote:
感謝大大辛苦的教學文...(恕刪)

先備份
然後再套用
如果不喜歡圖示
再自己放喜歡的圖示進去
真是太厲害了~
真感謝^^
又學到一招了


修改成功!
使用RE管理器複製到system/app下
修改權限後關機拆電池重啟
沒有拆電池重啟卡第一屏
其實不一定要拆電池
如果你有跟電腦連接
只要用adb reboot重新開機
這樣也可以
messageboxs wrote:
因為NEO NO1官...(恕刪)

實用的教學...用在S3 4.1 也可以Work..
感謝分享..

kingka wrote:
實用的教學...用在...(恕刪)

你拿NEO NO1的SystemUI.apk去覆蓋S3的喔
真的有勇氣
理論上不應該可以使用的
建議你測試一下上方狀態列下拉的所有功能
理論上會有強制關閉的地方
這教學不能直接用UOT kitchen代替嗎??
只要上傳兩個檔案然後選樣式就好啦,
其他部分網站都會自動做好~

csc343 wrote:
這教學不能直接用UO...(恕刪)

當然可以
只是發出來讓有興趣的人知道
到底做了什麼事
改變了1%電量
跟kitchen做的事是一樣的
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?