2013年1月31日木曜日

001HTでMVNOなsimのアンテナピクト

001HT (desire HD) で iijmioのsimを運用してるんですが、アンテナがずっと圏外なんですよね。
幸い、セルスタンバイは4~10%程度と、異様にバッテリーが減る状態ではないので、
適当な電波状態表示アプリ入れてお茶を濁していたんですが、いろいろ調べた結果、何とかなりそうだったので、何とかしてみました。

手順は、Android + b-mobile データ専用 SIM で電界強度を表示する | ブローヴちゃん とほぼ同じです。
但し、純正ROMの001HT君は、非deodex(jarとodexがペアで存在する)環境なので、 このパッチは適用できません。
そこで、いろいろな方々が公開してくださっている情報を統合して、試行錯誤してどうにかなった感じです。

思い切り自分用の備忘録なので、同じようにやっても出来るかどうかは分かりませんし、
スマホが壊れても知りません。

準備したもの:
java(1.6)
rootedでsimフリーで、ClockWorkModRecoveryが入ってる 001HT(2.3.3)
adbで接続できる環境
Android + データ専用 SIM での動作修正パッチ | ブローヴちゃん から修正パッチの最新版


まず、適当な場所にブローヴちゃんから頂いてきたパッチを展開。
中に入っているツールをありがたく利用させて頂きます。
展開すると、こんな感じになっていると思います。(20120317版)

2012/01/09  11:45           587,776 7za.exe
2012/01/09  12:17           162,816 adb.exe
2012/01/09  12:17            96,256 AdbWinApi.dll
2012/01/09  12:17            60,928 AdbWinUsbApi.dll
2012/01/21  10:52           794,321 baksmali-1.3.2.jar
2012/01/23  15:24             8,543 data-only-sim-smali-fixer.wsf
2012/03/16  23:32            12,894 execute.bat
2012/03/17  08:25            10,685 msg_en.bat
2012/03/16  11:16            10,976 msg_ja.bat
2012/03/16  23:25             1,305 recover.bat
2012/01/21  10:52         1,779,080 smali-1.3.2.jar


実機からframeworkフォルダを取り出す。

adb pull /system/framework

BOOTCLASSPATHを調べるために、init.rcを取り出す。(逆コンパイルに必要)

adb pull init.rc

init.rcから必要なjarのリストを作成する。
export BOOTCLASSPATH /system/framework・・・・・ の行を探す。
そこにjarがずらっと書いてあるので、コピペして、置換でもして/system/framework/を消す。

core.jar:bouncycastle.jar:ext.jar:framework.jar:android.policy.jar:s・・・・ こんな感じ。

framework.jar framework.odexを作業用ディレクトリへコピー

copy framework\framework.jar work
copy framework\framework.odex work

framework.odexを逆コンパイルする

java -jar ..\baksmali-1.3.2.jar -a 10 -d ..\framework -x framework.odex -c:<jarのリスト>


アンテナピクトの部分を修正する。
out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smaliを編集
 "private regCodeToServiceState"の100行くらい下を以下のように編集

   :pswitch_data_42
    .packed-switch 0x0
        :pswitch_23
        :pswitch_22
  ← ここを見て
        :pswitch_25
        :pswitch_22  ← ここと
        :pswitch_2d
        :pswitch_22
        :pswitch_8
        :pswitch_8
        :pswitch_8
        :pswitch_8
        :pswitch_35
        :pswitch_8
        :pswitch_35
        :pswitch_22
  ← ここを編集
        :pswitch_35
        :pswitch_37
    .end packed-switch


編集が終わったらsmaliで再コンパイル。

java -jar ..\smali-1.3.2.jar -o classes.dex out

classes.dexをframework.jarに突っ込む。

..\7za u -tzip framework.jar classes.dex

で必要なものが出来上がりました。
ここからは実機のシステム領域を書き換える作業になります。
(失敗すると文鎮化するかもしれません。自分の責任下において実行してください)

実機をrecoveryで起動

adb reboot recovery

/systemをマウントしてframework.jarを置き換える

adb shell mount /system
adb push framework.jar /system/framework/

framework.odexを削除する

adb shell rm /system/framework/framework.odex

ClockworkMod Recovery のメニューから advanced を選び、Wipe Dalvik Cache を選ぶ。

Wipe cache partition もやっとく。
んで再起動

※ここではまだ、ちゃんと起動してきません!!(softbankのロゴのままになる)

/data/local/tmpにframework.odexを転送しておく

adb push ..\framework\framework.odex /data/local/tmp

dalvik-cacheの中にdexファイルが出来ているので、framework.odex.newとして /data/local/tmpにコピー

adb shell
cp /data/dalvik-cache/system@framework@framework.jar@classes.dex /data/local/tmp/framework.odex.new

framework.odexの署名をnewにコピー

cd /data/local/tmp
busybox dd if=/system/framework/framework.odex of=framework.odex.new bs=1 count=20 skip=52 seek=52 conv=notrunc

実機をrecoveryで再起動


adb reboot recovery

framework.jarを元に戻して、framework.odex.newを/system/framework/framework.odexとしてコピー

adb shell mount /system
adb shell mount /data
adb push ..\framework\framework.jar /system/framework
adb shell chmod 644 /system/framework/framework.jar
adb shell
cp /data/local/tmp/framework.odex.new /system/framework/framework.odex
chmod 644 /system/framework/framework.odex

ClockworkMod Recovery のメニューから advanced を選び、Wipe Dalvik Cache を選ぶ。
Wipe cache partition もやっとく。
んで再起動すると・・・?

間違いがなければ、これでアンテナピクトが表示されるようになってるはず。
起動してこなかったら、..\frameworkのframework.jarとframework.odexを書き戻せば
元に戻ります。多分。

ああ疲れた。

0 件のコメント:

コメントを投稿