2012年3月31日土曜日

IIJmio高速モバイル & Galaxy Nexusのセルスタンバイ問題を解決!

IIJmio高速モバイル & Galaxy Nexus(GN)の組み合わせでかなり満足して使っていたが、唯一不満があったのがバッテリの持ちであった。

IIJmioやb-mobileのデータ専用のSIMだと電波なし状態になってしまい、端末が電波を探すためフルパワーでサーチするので異常にバッテリを食うとの事であったが、解決する人が現れた。

以下のページの手順を行ったところ、あっさり解決した。
素晴らしい!

山県昌景  -  イオンSIM使用時の圏外100%対策についてのメモ(SC-04D)
https://plus.google.com/105942727317441447672/posts/bkQp64TSahw


基本的にここに書かれている手順でOKだが、自分が分かりやすいように補足を入れた手順を
下記にメモしておく。

-----
■必要なもの
・Android SDK、JDKがインストールされ、GNにadbで接続できる状態になっているWindows PC(Win7で行った)
・busybox、ClockWorkModが動くようになっているGN
私のGNにはTitanium Backupがインストール済だったのでbusyboxも既に入っていた。
あとは使いやすいようにbusybox -> /data/data/com.keramidas.TitaniumBackup/files/busybox のリンクを張っておいた。
・smali / baksmali: http://code.google.com/p/smali/
・dexopt-wrapper : http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36

-----
■手順
1./system/frameworkaから必要なファイルを取り出す
GNとPCを接続した状態で、コマンドプロンプトから下記を実行。
adb get /system/framework/framework.jar
adb get /system/framework/framework.odex
adb get /system/framework/bouncycastle.odex
adb get /system/framework/core.odex
adb get /system/framework/core-junit.odex

※下の3つは逆コンパイルするときに参照されるため必要。


2.framework.odexを逆コンパイル
コマンドプロンプトから下記を実行。
java -jar baksmali.jar -x framework.odex

これでoutというフォルダが作られ、その中に逆コンパイルされた内容が展開される。


3.「out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali 」を
テキストで開き、「.method private regCodeToServiceState(I)I」の下にあるpswitch_data_22以下をエディタで編集。

:pswitch_data_22
    .packed-switch 0x0
        :pswitch_1c
        :pswitch_1d
        :pswitch_1c
        :pswitch_1d ← ここを :pswitch_1c から :pswitch_1d に変更した
        :pswitch_1c
        :pswitch_1f
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_5
        :pswitch_1c
        :pswitch_5
        :pswitch_1c
        :pswitch_1d ← ここも :pswitch_1c から :pswitch_1d に変更した
        :pswitch_1c
    .end packed-switch


4.classes.dexに再コンパイル
コマンドプロンプトから下記を実行。
java -jar smali.jar -a 14 -o classes.dex out

これでclasses.dexが作られる。


5.classes.dexをframework.jarに入れる
7-zipでframework.jarを開き、そこのルートディレクトリに作成したclasses.dexを入れる


6.端末の「/data/local/tmp」にdexopt-wrapperとframework.jarをコピーする
コマンドプロンプトから下記を実行。
adb push framework.jar /data/local/tmp
adb push dexopt-wrapper /data/local/tmp


7.dexopt-wrapperを使ってjarをodexに変換
コマンドプロンプトからadb shellを起動し、下記のように実行。
adb shell
$ cd /data/local/tmp
$ chomod 755 dexopt-wrapper
$ ./dexopt-wrapper framework.jar framework.odex
これでframework.odexが作られる。


8.署名をコピーする
$ busybox dd if=/system/framework/framework.odex of=framework.odex bs=1 count=20 skip=52 seek=52 conv=notrunc


9.「/system/framework/framework.odex」を作成したものと置き換える
Recoveryモードで行ったほうが安全なので、下記の手順で行った。
・CWMを起動
・CWMにて/system、/dataをマウント
・PCからadb shellでGNに入る
・コピー&置き換え
busybox cp /data/local/tmp/framework.odex /system/framework/framework.odex.new
mv /system/framework/framework.odex /system/framework/framework.odex.bak
mv /system/framework/framework.odex.new /system/framework/framework.odex
sync

10.端末を再起動
CWMのメニューからreboot system nowを選択


以上。
これでIIJmioのSIMでもきちんとアンテナマークが表示されるようになり、
電池も持ちも良くなりました。


-----
セルスタンバイ問題も解決して、いまの環境に大満足です。
月1300円以下でパケホーダイ&通話も可能、バッテリの持ちの問題も解決したスマホになりました。

非常にお勧めです。

6 件のコメント:

  1. はじめまして、一月ほど前にGT-i9250を買い使っているのですが同様にアンテナ立たずアプリで対応
    ブローヴちゃんのBATもframework.odex がネックで使えず、自分で環境を作って逆アセしなきゃ駄目かと思っていたところに、貴殿の投稿・・
    よろしければ修正済みの「framework.odex」を頂けませんか?
    一度置換えで確認してみたいのですが・・

    返信削除
  2. upple.info の8183にアップしました。
    DLパスはFibonacci numberの最初の7文字です。

    うまく行くといいですね。^^

    返信削除
  3. ありがとうございます。
     遅くなりましたが先ほどダウンロードしました。
    また、結果報告させて頂きます m(__)m

    返信削除
  4. 駄目でしたわ・・
    docomo版とUK版微妙に違うんでしょうねぇ??
    ちなみに私のはBuild ICL53Fです。
    文鎮になりかけたけれど何とかリカバリできました。
    古いノートがあるのでそれを専用に関係アプリをインストールするかな・・ (^^;
    一から勉強し直します

    返信削除
  5. だめでしたか・・・
    もし/system/framework 以下を一式頂けたら、署名なしframework.odexを作るところまでやってみましょうか?

    返信削除
  6. このコメントは投稿者によって削除されました。

    返信削除