[RAZR HD]アンテナピクトを表示させる。

ようやく見つけたぜ・・・。

Screenshot_from_2013-01-03 14:48:13

bmobile SIMを購入してRAZR HDに差し込んでみると案の定、アンテナが立ちません。
Screenshot_2013-01-03-14-55-13
そこでコチラの先人様のサイト

を参考に作業を進めようとしたのですが、framework.odexを分解しても「GsmServiceStateTracker.smali」が見当たらない。
じゃあ諦めるか、と思っていたのですがやっぱりいつも圏外表示は精神衛生上あまりよろしくない。
だから何とか探していたのですが、ようやく見つけました。

ファイルは「/system/framework/」ディレクトリにある「framework-ext.odex」です。
これを分解します。

java -jar baksmali.jar -d system/framework -x framework-ext.odex -o framework-ext

これを辿って行くと「framework-ext/com/android/internal/telephony」ディレクトリ内に「GsmServiceStateTracker.smali」がありました。

UTF-8なテキストエディタで開きます。サクラエディタを推奨?かな。
(途中までUbuntuのgeditorで編集をしていたせいか、コンパイルに失敗していた。なぜだろ。)
それで「.method private regCodeToServiceState(I)I」をキーワードとして検索。
RAZR HDだと5229行目にあります。
Screenshot_from_2013-01-03 15:01:25

そこから下にスクロールして行くと5287行目にいじるべき箇所が現れます。
Screenshot_from_2013-01-03 15:03:59

さて書き換えるべきところを先ほどのサイト通りに試行錯誤を繰り返すこと数時間。
何度コンパイルをしたんだろ。ようやく発見。
答えはバッチファイルに書かれてました。
最初の「:pswitch_lb」が「0行目」とカウントし、「1行目」の値「:pswitch_1e」を基準として、「2」「3」「12」「13」行目に反映させていきます。

    .packed-switch 0x0
        :pswitch_1b
        :pswitch_1e(←ここが基準
        :pswitch_1b(←2行目。ここを書き換える。
        :pswitch_1b(←3行目。ここを書き換える。
        :pswitch_1b
        :pswitch_20
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_1c
        :pswitch_5
        :pswitch_1c(←12行目。ここを書き換える。
        :pswitch_1c(←13行目。ここも書き換える。
        :pswitch_1c
    .end packed-switch

んでこんな感じ。
Screenshot_from_2013-01-03 18:48:28

さてこれで電波強度が出るかな。
コンパイルしてみます。

java -jar smali.jar framework-ext/ -o classes.dex

とclasses.dexを作ってframework-ext.jarに入れようかなと思ったら既にframework-ext.jarに「classes.dex」が入っていました。deodexed化されてるの??
よく分からないけど既に入っているclasses.dexを新たに作ったものと入れ替えてみます。
これは7zipを使って圧縮レベルゼロのままファイルの差し替えをします。
Screenshot_from_2013-01-03 19:01:41

削除したら追加。
Screenshot_from_2013-01-03 19:02:28

ここで一つ疑問が湧きました。

端末内にある「framework-ext.jar」の中に何も書き換えてない純粋の「classes.dex」が入っている=deodex化されている、ということはandroidが起動した時、この純粋なclasses.dexが後から放り込む「classes.dex」を上書きしてしまうのでは?

と何の知識もないです。勘です。
ということでframework-ext.jarからclasses.dexを抜き取ったframework-ext-none.jar(仮称)を作っておきました。
Screenshot_from_2013-01-03 19:06:22

それでは次の工程へ。

ここから「all_for_deodexing_reodexing.zip」をダウンロードして「dexopt-warpper」を用意しておきます。

まずは送り込み。
/data/local/tmpディレクトリへファイルを送り込みます。
送り込むのはここでは

  • dexopt-wrapper
  • framework-ext.jar
  • framework-ext-none.jar

です。
コマンド。

$ adb push dexopt-wrapper /data/local/tmp
$ adb push framework-ext.jar /data/local/tmp
$ adb push framework-ext-none.jar /data/local/tmp

続いてdexopt-wrapperが使える直前までコマンド打ち込み。

$ adb shell
$ su
# mount -o remount,rw /dev/block/mtdblock0 /system
# cd /data/local/tmp
# chmod 777 dexopt-wrapper

ちょっと不安だったので「ls」コマンドでディレクトリ内のファイルを確認

# ls
dexopt-wrapper
framework-ext-none.jar
framework-ext.jar

dexopt-wrapperを使ってclasses.dexをodex化

# ./dexopt-wrapper framework-ext.jar framework-ext.odex
--- BEGIN 'framework-ext.jar' (bootstrap=0) ---
--- waiting for verify+opt, pid=2763
--- would reduce privs here
--- END 'framework-ext.jar' (success) ---

続いてオリジナルの「framework-ext.odex」から署名部分だけ引っこ抜いてカスタマイズした「framework-ext.odex」へ書き込み。

# busybox dd if=/system/framework/framework-ext.odex of=framework-ext.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
20+0 records in
20+0 records out
20 bytes (20B) copied, 0.001404 seconds, 13.9KB/s

パーミッションを整える。

# chmod 644 framework-ext*
# chown root framework-ext*

出来上がったファイル群を/system/framework/以下に放り込む。
放り込む際に上書きしないように「.new」を付けたりする。何でもいいけど。
それで不安だからまた「ls」コマンド。

# cp framework-ext.odex /system/framework/framework-ext.odex.new
# cp framework-ext-none.jar /system/framework/framework-ext-none.jar
# cd /system/framework/
# ls framework-ext*
framework-ext-none.jar
framework-ext.jar
framework-ext.odex
framework-ext.odex.new

不要なファイルのファイル名を書き換えバックアップ。

# mv framework-ext.odex framework-ext.odex.bak
# mv framework-ext.jar framework-ext.jar.bak
# ls framework-ext*
framework-ext-none.jar
framework-ext.jar.bak
framework-ext.odex.bak
framework-ext.odex.new

最後にカスタマイズしたファイルをちゃんとしたファイル名に書き換えて使えるようにする。

# mv framework-ext-none.jar framework-ext.jar
# mv framework-ext.odex.new framework-ext.odex

キャッシュの書き込みと再起動。

# sync
# reboot

このあとカスタムリカバリを起動してdalvik-cacheを消すように書いてあったけど、消さなくても大丈夫でした。

無事にアンテナが立ちました。
Screenshot_2013-01-03-18-55-26

最後の方は手抜きで済ませてしまいましたが、だいたいこんな流れで。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください