2013年6月29日土曜日

【Xperia】Bluetoothテザリング(BT-PAN)有効化

テザリングというと通常はWi-Fiテザリングですが、世の中にはBluetoothテザリングというものもあるそうで。Wi-Fiよりも電池を食わないとの噂です。
ところが最近のXperiaでは、なぜかBluetoothテザリングの設定項目が消されており、使えません。
ということで、この設定項目を復活させ、Bluetoothテザリングを可能にする試みを行います。

前提は以下です。
・トラブっても自力で復旧できること(つまり自己責任)
・rootとってあること
・CWMを導入してあること
・作業PCでapkの生成、端末に転送できる環境であること
・AX SO-01E と Z SO-02E で動作確認しました
・母艦はWindows 7

odexをいじっていろいろ検証してみたのですが、なぜか上手くいかなかった(設定項目自体は出現するが、テザリングが機能しない)ので、この記事の手法であるオーバーレイでやることにしました。

■必要物資
・aapt.exe(Android SDKにも含まれていますが、最新版がベター)

aapt.exeは、「apktool」で検索した先でゲット。
apktoolのダウンロードページに「apktool-install-windows-うんたらかんたら.tar.bz2」というのがありますが、その中に含まれています。

■1.PCにおける作業フォルダの準備
ここでは「c:\apkwork」とします。
この中に、「new」「framework-res-custom」フォルダを(無ければ)新規作成します。
必要物資たちは作業フォルダ直下にぶっこみます。

□apkwork ┳ □new(生成されたframework-res-custom.apkが入る予定)
     ┣ □framework-res-custom(ソースファイル群が入る)
     ┗ aapt.exe

■2.ソースファイル作成
「framework-res-custom.apk」というファイルを作成するため、各種ファイルを捏造します。

【2-1】「AndroidManifest.xml」作成
テキストエディタで以下の内容を打ち込み、framework-res-customフォルダ内に「AndroidManifest.xml」という名前で保存します。

<?xml version="1.0" encoding="utf-8"?>
<manifest package="android.overlay.custom"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <overlay target="android" priority="100" />
</manifest>

【2-2】リソース作成
 framework-res-customフォルダ内に「res」フォルダを新規作成し、さらにその中に「values」フォルダを新規作成します。

テキストエディタで以下の内容を打ち込み、valuesフォルダ内に「arrays.xml」という名前で保存します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="config_tether_bluetooth_regexs">
        <item>bnep\\d</item>
    </string-array>
</resources>

ちなみにpublic.xmlは不要。リソースIDはapk生成時に勝手に振られます。
また振られるリソースIDは「0x7fxxxxxx」となり、オリジナルのIDとは別物になりますが、特に影響は無いようなので気にしなくて大丈夫です。

結果的に、framework-res-customフォルダ内の構成は以下のようになります。

□framework-res-custom ┳ □res ━ □values ━ arrays.xml
            ┗ AndroidManifest.xml

■3.apk生成
「apkwork」フォルダでコマンドプロンプトを開き、以下のコマンドを実行します。

C:\apkwork>aapt package -S framework-res-custom\res -M framework-res-custom\AndroidManifest.xml -f -v -F new\framework-res-custom.apk

newフォルダにframework-res-custom.apkが生成されます。

■4.端末をCWMモードにして待機
以降は端末をCWMモードにして作業をすすめます。
CWMが起動したら、「mounts and storage」に入り、「mount /system」と「mount /data」をしておきます。
もちろんPCと端末はUSBでつないでおいてください。

■5.ファイルを端末にぶっこむ
C:\apkwork>adb push new\framework-res-custom.apk /data/local/tmp

■6.framework-res-custom.apkのパーミッション変更
以降は端末のシェルに入っての作業となります。

C:\apkwork>adb shell
~ # cd /data/local/tmp
/data/local/tmp # chmod 0644 framework-res-custom.apk

■7.framework-res-custom.apkを所定の位置にコピー、一旦再起動
/data/local/tmp # cp framework-res-custom.apk /system/vendor/overlay
/data/local/tmp # reboot

/system/vendor/overlayにapkを配置。ここに置いたapkは元のapkに優先して活躍してくれます。
rebootで再起動。

■カスタムを元に戻すには
・/system/vendor/overlay/framework-res-custom.apk
・/data/resource-cache/vendor@overlay@@framework-res-custom@idmap
・/data/system/overlay/system@framework@framework-res.apk/0100

上記3点を削除して再起動すればOKです。

■Bluetoothテザリングのやり方
なにはともあれ、親機と子機をペアリングしてください。
そして親機の方の「設定」→「(無線とネットワーク)その他の設定」→「テザリング」→「Bluetoothテザリング」にチェックを入れてください。
子機がスマホの場合、ステータスバーのbluetoothのアイコンが白くなれば成功と思われます。白くなっていなかったら、子機のbluetooth設定で、親機の名前の横の設定をタップ、プロフィールの「インターネットアクセス」をタップしてみてください。
子機がPCの場合は、bluetoothのウィンドウで親機のアイコンを右クリック→「接続方法」→「アクセスポイント」をクリックでいけると思います。

■おまけ
インストーラーをアップしました。CWM上からzipをインストールしてください。
cwm-btpan-mod

アンインストールは以下で。
cwm-remove-frameworkres-overlay

18 件のコメント:

  1. お疲れ様です。

    うちの社長がハワイに行ったときの話ですが、Wi-Fiテザリングという言葉は通じなかったそうです。HotSpotというと通じるらしいです。
    どうもWi-FiでのテザリングをHotSpotという言葉で表すみたいですね。なのでBTのテザリングをHotSpotとは言わないようです。

    全然関係ない話でしたね(^^;)

    返信削除
    返信
    1. またひとつ余計n…賢くなってしまった…。

      削除
  2. 今回の記事と全く関係がないのですが
    xperia ray[root,cwm実装済み]
    を使用しています。
    もしよろしければ、戻るボタンでアプリ終了だけでもいいので
    cubemodを作っていただけないでしょうか?

    返信削除
    返信
    1. 申し訳ありませんが、実機が無いととても作れません…。
      Zへの移植で痛感しました。

      削除
  3. 一点お聞きしたく。
    こちらの BT-PAN mod.zip ですが
    cubecubeさんの Xperia Z mod を導入した端末に上書き導入可能なのでしょうか?
    (すみません、まだどちらも導入してないのですが、これから導入しようかと考えているところです)

    返信削除
    返信
    1. それぞれ改変しているファイルが別ですので、独立して適用可能ですよ。

      削除
    2. 早速のお返事ありがとうございます。
      それぞれ導入しても、それぞれが反映されて機能するんですね(^^)
      試してみます!
      実は車のナビのリアルタイム渋滞情報更新のため、ZとナビをBT-PANで繋ぎたかったんです。

      削除
    3. おっしゃる通りです。
      なるほど、ナビがBT通信なんですね。お役に立てれば幸いです。

      削除
  4. Xperia ULでもこの記事の通り新規作成して、正常動作確認できました。またまたmodに反映させていただきます!ありがとうございます。

    返信削除
    返信
    1. お疲れ様です。
      最近のXperiaですと、同じやり方でオーバーレイできるようですね。
      ご報告ありがとうございました。

      削除
  5. Xperia SXでも記事通り作業してBTのテザリングが出来るようになりました。今まで諦めていたBTのテザリングが出来るようになったおかげでWI-FIテザリングよりもバッテリー消費が3分の1程度に抑えられとても満足しています。ありがとうごさいます。

    返信削除
  6. ULってもともとbluethoothテザリングの有効にするボタンがあるのですがこのMOD入れないと使えないのでしょうか?

    返信削除
    返信
    1. それはおそらくBT-PANではなくBT-DUNかと思われます。
      違いは分かりません、当方では検証出来ませんので…。
      (PANがアクセスポイント方式、DUNがダイヤルアップ方式?)
      ただ、DUNよりPANの方が安定しているという話は聞きますね。

      削除
  7. 残念ながら、XperiaE (JB)ではダメでした。。残念です。

    返信削除
  8. Xperia tipo dualもダメでした・・・

    返信削除
  9. リンク先のファイルが消えてしまっています
    再アップロードをお願いします

    返信削除
    返信
    1. 消えているというか、リンクが無効になっているだけです。
      更新しておきました。

      削除
    2. ありがとうございます
      助かりました

      削除