ようやく見つけたぜ・・・。
bmobile SIMを購入してRAZR HDに差し込んでみると案の定、アンテナが立ちません。
そこでコチラの先人様のサイト
を参考に作業を進めようとしたのですが、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行目にあります。
そこから下にスクロールして行くと5287行目にいじるべき箇所が現れます。
さて書き換えるべきところを先ほどのサイト通りに試行錯誤を繰り返すこと数時間。
何度コンパイルをしたんだろ。ようやく発見。
答えはバッチファイルに書かれてました。
最初の「: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
さてこれで電波強度が出るかな。
コンパイルしてみます。
java -jar smali.jar framework-ext/ -o classes.dex
とclasses.dexを作ってframework-ext.jarに入れようかなと思ったら既にframework-ext.jarに「classes.dex」が入っていました。deodexed化されてるの??
よく分からないけど既に入っているclasses.dexを新たに作ったものと入れ替えてみます。
これは7zipを使って圧縮レベルゼロのままファイルの差し替えをします。
ここで一つ疑問が湧きました。
端末内にある「framework-ext.jar」の中に何も書き換えてない純粋の「classes.dex」が入っている=deodex化されている、ということはandroidが起動した時、この純粋なclasses.dexが後から放り込む「classes.dex」を上書きしてしまうのでは?
と何の知識もないです。勘です。
ということでframework-ext.jarからclasses.dexを抜き取ったframework-ext-none.jar(仮称)を作っておきました。
それでは次の工程へ。
ここから「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を消すように書いてあったけど、消さなくても大丈夫でした。
最後の方は手抜きで済ませてしまいましたが、だいたいこんな流れで。
コメント