Motorola milestone 2 改造記 その2 -Battery 1% step化- | あれなメモ帳

あれなメモ帳

日々の事を忘れないようにメモしていきますね基本。
だからあまり役に立たないかもw

なんかかなり放置してたねぇ...ここ...メモ帳放置とかどんなだよ...ってのはあるけど、一応メモ帳でも公開するものだからちょっとはまとまってないといけないかなぁ...とか考えてて全くメモ出来てなかったねぇ...前回書いたのがF-02B使用記...ってもう3ヶ月も前の話になるんですねぇ...はいwwwまぁこの3ヶ月間は殆ど何も買わずにおとなしくしてましたよ...ってかなり話がそれてきたので本題へ戻りましょうかねぇ.............




そう、Motorola端末の永遠の課題である悪しきバッテリー残量表示ですねぇ...

こちらのブログを見て1% stepでの表示が出来るようにすることは知っていました...でも時間も無いしやる気も無かったので最近完成させたばっかなので忘れないうちにメモメモ...


Motorola端末...内部的には1% stepの値を持ってるんですよね...なのに何故表示は10% stepなんでしょうかねぇ...マジで謎です...まぁそんなこんなで色々いじることになりましたとさーじゃあいってみようかー(・∀・)ニヤニヤ
ぶ、文鎮になっても知らないんだからねっ!!




まぁ前回の改造記でも書いた項目もあるけどおさらい的な意味で全部書き直しておきます...w



今回、少し試してみたかったって言うのもあってBrazil版の3.12.0と言うバージョンのromを焼いてからやってみることにした

RSD Lite 4.9をダウンロード...ってリンクが...まぁどこかで探してきましょう!!www
milestone 2 sbf filをココからダウンロード...って今見たらAndroid 2.2.2のromが来てるじゃないかっ...あ、後で入れてみるかなー

電源の切ってある端末をカーソルキーの↑キー+電源キー長押し、画面の電源が入ったら離す...っとbootloaderモードに入る、この状態でRSDと繋いでstartクリック!!
それで純正romはそのうち焼き終わります


まずはroot化から...

z4rootをココからダウンロード(アカウントいるので作っておきましょう)前はマーケットから普通にダウンロード出来たのですが...削除されたみたいです...orz

z4rootの.apkファイルをダウンロードしたらそのままmicroSDに入れて端末にインストール、permanent rootをタップして再起動したら完了!!


次にリカバリーの導入

Droid 2 Recovery Bootstrapをココからダウンロード

これもroot化と同じで.apkをインストールしてBootstrap Recoveryをタップ、successと表示されたら成功!!


次は...busybox導入ですかねぇ...

導入方法は色んな人が色々と公開してるので詳しくは必要ないと思いますが...と言うかめんどくさいからコレ使えば一発で導入出来る。

.apkをインストールして実行をタップするだけで完了!!


そしてそして...deodex化しましょう

これもやり方は色んな先人g(ry...まぁdeodexもめんどくさいから全自動でやってくれるツール使いましたね、はい、全くサボってますね、はいw

xUltimate v2.2.3をココからダウンロードして解凍

まぁ使い方はadbで繋がる端末を接続してMein.exeを実行するとまぁ出来るから、自由に項目選んでやれば良いと思うよ...私は1,2,3,4とやっておいた。
そして、done_appとdone_frameという二つのファイルがはき出されるので、これらをmicroSDにコピー

端末をadbで接続してコマンドを打つ


adb shell
$ su
# stop
# mount -o rw,remount /dev/block/mmcblk0p12 /system
# cp /sdcard/done_app/* /system/app/
# cp /sdcard/done_frame/* /system/framework/
# rm /system/app/*.odex
# rm /system/framework/*.odex
# mount -o ro,remount /dev/block/mmcblk0p12 /system
# reboot

再起動したらdeodexされた端末が戻って来ます!!



まぁここまでが下準備ですね分かりますwww

下準備どんだけ長いんだよって言われても私は知りません(キリッ


まぁ本題へ入っていこうと思います...

まず、deodexされた端末からservices.jarを引っ張ってきます、または先ほど作ったdone_frameというファイルの中から持ってきてもかまいませんがservices.jarを用意しましょう。

7-zipやらなんやらでservices.jarからclasses.dexを引っ張ってきます。

baksmali-1.2.6.jarとsmali-1.2.6.jarをココからダウンロードしてC:\Users/xxxx/に置いておく。

classes.dexもsmaliと同じフォルダに置いておく。

コマンドプロンプトを起動し...


java -jar baksmali-1.2.6.jar -o classout/ classes.dex


と入力すると、classoutフォルダが出来るのでその中のファイルから...
/smali/com/android/server/BatteryService.smali
をテキストエディタやらなんやらで開いて

iget v3, p0, Lcom/android/server/BatteryService;->mBatteryLevel:I

invoke-virtual {v1, v2, v3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;

と言う表記を探す...そしてこの部分を書き換える

#iget v3, p0, Lcom/android/server/BatteryService;->mBatteryLevel:I

invoke-direct {p0}, Lcom/android/server/BatteryService;->getBatteryLevel1Step()V

iget v3, p0, Lcom/android/server/BatteryService;->mBatteryLevel1Step:I

invoke-virtual {v1, v2, v3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;

ここでBattery Levelの投げる値をcharge_counterへ変更します

またこのBatteryService.smaliにこれらを追加

# instance fields

.field private mBatteryLevel1Step:I





.method private getBatteryLevel1Step()V
.locals 8

.prologue
.line 30
const/4 v4, 0x0

.line 32
.local v4, reader:Ljava/io/FileReader;
:try_start_0
new-instance v5, Ljava/io/FileReader;

const-string v6, "/sys/class/power_supply/battery/charge_counter"

invoke-direct {v5, v6}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
:try_end_0
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_1

.end local v4 #reader:Ljava/io/FileReader;
.local v5, reader:Ljava/io/FileReader;
move-object v4, v5

.line 35
.end local v5 #reader:Ljava/io/FileReader;
.restart local v4 #reader:Ljava/io/FileReader;
:goto_0
const/16 v6, 0x14

:try_start_1
new-array v1, v6, [C

.line 36
.local v1, buf:[C
invoke-virtual {v4, v1}, Ljava/io/FileReader;->read([C)I

move-result v3

.line 37
.local v3, read:I
invoke-virtual {v4}, Ljava/io/FileReader;->close()V

.line 38
new-instance v0, Ljava/lang/String;

const/4 v6, 0x0

invoke-direct {v0, v1, v6, v3}, Ljava/lang/String;-><init>([CII)V

.line 39
.local v0, batteryLevelsysfs:Ljava/lang/String;
const-string v6, "\n"

const-string v7, ""

invoke-virtual {v0, v6, v7}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;

move-result-object v0

.line 40
invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I

move-result v2

.line 41
.local v2, mBatteryLevel1Step:I
const/16 v6, 0x64

if-lt v2, v6, :cond_0

.line 42
const/16 v2, 0x64

.line 45
:cond_0
sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;

#invoke-virtual {v6, v2}, Ljava/io/PrintStream;->println(I)V
iput v2, p0, Lcom/android/server/BatteryService;->mBatteryLevel1Step:I
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0

.line 52
.end local v0 #batteryLevelsysfs:Ljava/lang/String;
.end local v1 #buf:[C
.end local v2 #mBatteryLevel1Step:I
.end local v3 #read:I
:goto_1
return-void

.line 48
:catch_0
move-exception v6

goto :goto_1

.line 33
:catch_1
move-exception v6

goto :goto_0

.end method




これからまたコマンドプロンプトを起動し...


java -Xmx512M -jar smali-1.2.6.jar classout/ -o new-classes.dex


と入力するとnew-classes.dexファイルが出来るので移動してclasses.dexへ名前を変更し7-zipやらなんやらでservices.jarに戻して...

端末にpushして再起動すれば終了!!


あれなメモ帳-A953






こんな感じで1% stepで表示されるようになりますよ!!

とまぁMotorola端末だと色々と書き換えないと表示出来ないのですが、私が持ってる他のメーカーのAndroidは全部標準で1% step表示してくれるんですよね...と言うかフューチャーフォンだって1% step表示するのに...何故にこのような仕様になったのか...?
まぁ中の人には色々事情があるのかも知れないですが...
まぁそんなこんなで1% step表示になったのです。やったね!!www



2011/9/9 誤り改正しました、ご指摘ありがとうございます。