SIMフリー化したHTC Jのアンテナピクト問題

実質SIMフリー化できるようになったHTC Jですが、MVNOのSIM等を挿すと所謂アンテナピクト問題が発生します。
非deodex且つframework2.jarを弄らなければならず、対処法が結構面倒ですが、その方法を紹介。


アンテナピクト問題とは、画面右上に表示されている電波の強さを表すアイコン(=アンテナピクト)が☓マークとなり、
実際にはデータ通信が行えるにも関わらず、圏外表示となる問題のことです。

antenna

これがアンテナピクトです。(この場合はアンテナピクト問題は発生していない)

アンテナピクト問題が発生している場合、端末からは圏外と判断されているために常に最大出力の電波を出すようになり、
電池の減りが異様に早くなるなどの問題が発生します。

また、機種によっては「ネットワークに接続していない」等といったメッセージが表示される場合があります。
ただし、メッセージを無視すれば接続は正常に行えます。

2012-11-29 18.34.36

例としてHTC Senseの場合、このように表示されますが実際にはデータ通信は行うことができます。
アンテナピクト問題は、音声契約をしていないMVNOサービスのSIMなどで発生します。

今回は、これらの諸問題を解決する方法の紹介です。
(対策済みバイナリが欲しいだけの人は、ページ最下部にあります)

この記事を書くにあたって参考にしたページは、以下の通りです。
———-
てくろぐ » アンテナピクト問題・セルスタンバイ問題とは何か
http://techlog.iij.ad.jp/archives/487

ブローヴちゃん: Android + b-mobile データ専用 SIM で電界強度を表示する
http://bl.oov.ch/2012/01/b-mobile-sim.html

【HTC J】framework/*.odexファイルの編集について » treffen @ memo
http://pub.slateblue.tk/memo/day2513.html
———-

まず、 必要なツールを準備します。

・smali / baksmali
http://code.google.com/p/smali/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+ReleaseDate+Size+DownloadCount

smali-1.x.x.jar と baksmali-1.x.x.jar をダウンロードします。
私はバージョン1.3.3で試しました。

・dexopt-wrapper
http://forum.xda-developers.com/showpost.php?p=3864655&postcount=36

・framework2.jar / framework2.odex
端末から引っこ抜きます。

adb pull /system/framework/framework2.jar
adb pull /system/framework/framework2.odex

・HTC Jのframework
同様に端末から引っこ抜き、frameworkフォルダ内に保存させます。

adb pull /system/framework framework

後は、PC側にjava環境と7zaコマンドが必要です。適当に用意してください。
端末側はCWMが使えることを前提としています。

———-

用意ができたら、まずはファイルを逆コンパイルします。

java -Xmx1024m -jar ./baksmali-1.3.3.jar -c:core.jar:core-junit.jar:bouncycastle.jar:\
ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:\
HTCDev.jar:HTCExtension.jar:filterfw.jar:com.htc.android.bluetooth.jar:wimax.jar:\
usbnet.jar:com.orange.authentication.simcard.jar:com.htc.fusion.fx.jar:\
com.htc.lockscreen.fusion.jar -d framework -x framework2.odex -o framework2

(”\”はUnix系で改行の意。Windowsのコマンドプロンプトを用いる場合、”\”を省略して全てを1行で打ち込みます。)

無事にコマンドが実行されると、カレントディレクトリに「framework2」というフォルダが出来ます。
その中の、out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smaliをエディタで開きます。
開いたら、以下の記述を探します。(バージョン2.05.970.3なら6690行目付近だと思われる)

    .line 2300
    :pswitch_data_44
    .packed-switch 0x0
        :pswitch_1c
        :pswitch_37
        :pswitch_1d
        :pswitch_29
        :pswitch_29
        :pswitch_39
        :pswitch_6
        :pswitch_6
        :pswitch_6
        :pswitch_6
        :pswitch_35
        :pswitch_6
        :pswitch_35
        :pswitch_35
        :pswitch_35
        :pswitch_3b
    .end packed-switch

この部分を、以下のように変更します。(pswitchの2行目の値で、4行目と14行目を書き換える)

    .line 2300
    :pswitch_data_44
    .packed-switch 0x0
        :pswitch_1c
        :pswitch_37
        :pswitch_1d
        :pswitch_37
        :pswitch_29
        :pswitch_39
        :pswitch_6
        :pswitch_6
        :pswitch_6
        :pswitch_6
        :pswitch_35
        :pswitch_6
        :pswitch_35
        :pswitch_37
        :pswitch_35
        :pswitch_3b
    .end packed-switch

作業が終わったら、ファイルを保存し、再コンパイルします。

java -Xmx1024m -jar ./smali-1.3.3.jar framework2 -o classes.dex

classes.dexをframework2.jarに突っ込みます。

7za d -tzip framework2.jar classes.dex
7za a -tzip framework2.jar classes.dex

出来上がったファイルと、先ほどダウンロードしたdexopt-wrapperを端末に転送します。

adb push framework2.jar /data/local/tmp/.
adb push dexopt-wrapper /data/local/tmp/.

framework2.jarをodex化し、署名をコピーします。

adb shell
$ cd /data/local/tmp
$ chmod 755 ./dexopt-wrapper
$ ./dexopt-wrapper framework2.jar framework2.odex
$ busybox dd if=/system/framework/framework2.odex of=./framework2.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
$ exit

5行目は実際には1行で入力する必要があるので、間違えないように。

ここまで出来たら、CWMを起動します。起動したらもう一息です。

adb shell
# mount /data
# mount /system
# cd /system/framework
# cp framework2.jar framework2.jar.orig
# cp framework2.odex framework2.odex.orig
# rm framework2.odex
# cp /data/local/tmp/framework2.odex .
# chmod 644 framework2.odex
# exit

その後、一応CWMの advanced->Wipe dalvik cacheからdalvikキャッシュを削除します。
そうしたら、端末を再起動してください。

これで、アンテナピクト問題が解決しているはずです!お疲れ様でした。
尚、私が使用しているアンテナピクト問題解決済みのframework2.odexをアップしておきます。(2.05.970.3用)
他の人の環境(端末)で使えるかどうか分かりませんので、報告を頂けると嬉しいです。
http://gadget.takoweb.com/wp-content/plugins/download-monitor/download.php?id=12

使えないようですので、頑張ってください!

[`evernote` not found]

    • fujimoto
    • 2013年 1月 16日 9:08pm

    貴重な情報を掲載下さり感謝いたします。

    アンテナの問題が解決しました。

    アンテナの☓がなくなりました。

    最初。一瞬、制限付き。。。 が表示されますが

    問題ないと考えます。

      • tako0910
      • 2013年 1月 16日 11:20pm

      無事解決したようで良かったです。
      一瞬制限付き・・・が表示されるのは、起動直後はまだ電波を掴んでいないために表示されるのだと思われ、
      すぐに消え、動作に影響は無いので大丈夫です。

    • kuma
    • 2013年 2月 7日 1:29am

    はじめまして。
    貴重な情報を公開して頂き本当にありがとうございます。

    現在Z321e_HTC_J_HK_Custom_ROM_Beta4_2.18.708.2_JP環境にて
    データ通信を利用しているのですが、
    この場合も上記と同様の作業を行えばよいのでしょうか?

      • tako0910
      • 2013年 2月 7日 1:32am

      記事が参考になれば幸いです。
      確認はしていませんが、同様の方法で解決すると思います。

    • kuma
    • 2013年 2月 7日 10:12pm

    上記の作業を行ったところ、
    b-mobileのデータsimでアンテナピクト問題が解決しました。
    本当にありがとうございました。

      • tako0910
      • 2013年 2月 8日 12:28am

      ご報告ありがとうございました。
      お役に立てて良かったです。

        • kunkun
        • 2013年 2月 11日 1:11pm

        私も『kuma』さんと同じ環境(だと思います)で使っていますが、何度作業を行っても起動出来なくなってしまいます。
        Z321e_HTC_J_HK_Custom_ROM_Beta4_2.18.708.2_JP環境では問題解決は出来ないとあきらめていたのですが、何か記載されていること意外に注意事項など御座いますでしょうか。
        まったく初めてroot化し、s-off なども行った初心者ですが、アドバイスなど頂けますでしょうか。

          • tako0910
          • 2013年 2月 11日 2:50pm

          どうでしょう…記載の通り行なってもらえれば大丈夫だと思いますが…
          最後にきちんとDalvik Cacheを削除していますか?

          後はコンパイルやdexopt-wrapperでの再Odex化の時にエラーが出ていないかなど確認ですね…

    • kunkun
    • 2013年 2月 11日 4:01pm

    Dalvik Cacheを削除は、記載どおりCWMでしっかりホームボタンを押して行っているつもりです・・・・・が?

    再コンパイル時のコマンドで
    java -Xmx1024m -jar ./smali-1.3.3.jar framework2 -o classes.dex
    を入力していますが何も返事が返っていません。

    再Odex化の時は下記のコマンドが記録されています。
    C:\Users00000\Desktop>adb shell
    shell@android:/ $ cd /data/local/tmp
    cd /data/local/tmp
    shell@android:/data/local/tmp $ chmod 755 ./dexopt-wrapper
    chmod 755 ./dexopt-wrapper
    shell@android:/data/local/tmp $ ./dexopt-wrapper framework2.jar framework2.odex
    <— BEGIN 'framework2.jar' (bootstrap=0) —
    — waiting for verify+opt, pid=7882
    — would reduce privs here
    — END 'framework2.jar' (success) —
    shell@android:/data/local/tmp $ busybox dd if=/system/framework/framework2.odex of=./framework2.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
    2.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
    </system/bin/sh: busybox: not found
    127lshell@android:/data/local/tmp $ exit
    exit

    となっています。
    勉強不足としかられそうですが、お時間の御座います時にご覧ください。

      • tako0910
      • 2013年 2月 11日 4:08pm

      /system/bin/sh: busybox: not found
      原因はここですねー
      busyboxが入ってないと書かれています。

        • kunkun
        • 2013年 2月 11日 6:28pm

        適切なアドバイスありがとう御座いました。
        気持ちが折れ掛かっていたところすくわれました。

        busyboxの設置ができ『アンテナピクトが正常』になりました!。

        貴重な情報の数々本当にありがとう御座います。
        tako0910さんのサイトと出会ってからISW13HT購入を決めたのですが、良かったと実感しています。
        これからもよろしくお願いします。

          • tako0910
          • 2013年 2月 11日 10:31pm

          解決したようで良かったです。

          ISW13HTのユーザーが増えて私も嬉しく思います。
          とても快適かついじり甲斐のある機種なので、どんどん活用していってください!

  1. トラックバックはまだありません。