2010年11月28日日曜日

Motorola Milestone2 バッテリーアイコン変更してみる。



Miletone2限定ってわけじゃないですけど…

Milestone2のバッテリーアイコン表示は0%、10%、20%、40%、60%、80%、100%の7段階表示ですが、これを0%、5%、10%、15%、20%、30%、40%、50%、60%、70%、80%、90%、100%の13段階に変更します。
htc端末なんかだと1%刻みで表示するようにする事ができます。


framework-res.apk内のxmlを編集するのですが、バイナリ形式になっているのでテキスト形式に変換してあげる必要があります。

変換にはapktoolを使います。
apktool

adb pullとかでframework-res.apkを引き抜いてきて

apktool d framework-res.apk

とすると同じディレクトリにframework-resフォルダが出来ます。

今回編集するのは/res/drawable-hdpi/stat_sys_battery.xmlと/res/values/public.xmlです。
端末によってはstat_sys_battery.xmlはdrawableの方にしかないかもしれません。

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="1" />
<item android:drawable="@drawable/stat_sys_battery_5" android:maxLevel="5" />
<item android:drawable="@drawable/stat_sys_battery_10" android:maxLevel="10" />
<item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" />
<item android:drawable="@drawable/stat_sys_battery_20" android:maxLevel="20" />
<item android:drawable="@drawable/stat_sys_battery_30" android:maxLevel="30" />
<item android:drawable="@drawable/stat_sys_battery_40" android:maxLevel="40" />
<item android:drawable="@drawable/stat_sys_battery_50" android:maxLevel="50" />
<item android:drawable="@drawable/stat_sys_battery_60" android:maxLevel="60" />
<item android:drawable="@drawable/stat_sys_battery_70" android:maxLevel="70" />
<item android:drawable="@drawable/stat_sys_battery_80" android:maxLevel="80" />
<item android:drawable="@drawable/stat_sys_battery_90" android:maxLevel="90" />
<item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
</level-list>


stat_sys_battery.xmlはこんな感じに編集します…


public.xml


<?xml version="1.0" encoding="UTF-8"?>
<resources>

<public type="drawable" name="stat_sys_battery_0" id="0x010803f1" />
<public type="drawable" name="stat_sys_battery_5" id="0x010803f2" />
<public type="drawable" name="stat_sys_battery_10" id="0x010803f3" />
<public type="drawable" name="stat_sys_battery_15" id="0x010803f4" />
<public type="drawable" name="stat_sys_battery_20" id="0x010803f5" />
<public type="drawable" name="stat_sys_battery_30" id="0x010803f6" />
<public type="drawable" name="stat_sys_battery_40" id="0x010803f7" />
<public type="drawable" name="stat_sys_battery_50" id="0x010803f8" />
<public type="drawable" name="stat_sys_battery_60" id="0x010803f9" />
<public type="drawable" name="stat_sys_battery_70" id="0x010803fa" />
<public type="drawable" name="stat_sys_battery_80" id="0x010803fb" />
<public type="drawable" name="stat_sys_battery_90" id="0x010803fc" />
<public type="drawable" name="stat_sys_battery_100" id="0x010803fd" />
</resources>



public.xmlはこんな感じで追加します…drawableのidは0x01080xxxです、ダブらないように定義してあげます。

あとはdrawable-hdpiにpngを追加してあげればokです。

xmlの編集、画像の追加が終わったらapktoolでbuildします。

apktool b framework-res framework-res.apk


通常はこの時点で出来たapkをそのまま/system/frameworkに入れてあげればOKなのですが、
Milesone2はresources.arscを無圧縮で.apkに入れてあげなくてはいけないので注意してください。

apktoolでビルドしたapkの中からresources.arscと今回編集、追加したファイルを抜き出してきます。
そしてオリジナルのframework-res.apkに7-zip等で無圧縮で追加します。


おまけ…deodexしてみる
xUltimate



adbで繋がる環境があればsystemから.apk/.odexファイルを引っこ抜いてきてdeodexまで自動で行ってくれます。

後はupdate.zipにまとめてあげればok

update-script

show_progress 0.5 0

run_program PACKAGE:remtool.sh

copy_dir PACKAGE:system SYSTEM:

show_progress 0.5 10


remtool.sh

#!/sbin/sh

mount /system;

rm -rf /system/app/*.odex;
rm -rf /system/framework/*.odex;

exit 0;


Enjoy!