iijmio meeting #1 最近のandroidとmvno simの関係
DESCRIPTION
この資料はIIJmio meeting #1で発表されたものです。詳細は下記blogをご覧下さい。 http://techlog.iij.ad.jp/archives/797TRANSCRIPT
IIJ 堂前 清隆 (@IIJ_doumae)
IIJmio meeting #1
最近のAndroidとMVNO SIMの関係
公開用に加筆版
‐ 2 ‐
Android+MVNOと言えば……
http://techlog.iij.ad.jp/archives/487 2012年8月8日公開
アンテナピクト問題・セルスタンバイ問題とは何か
‐ 3 ‐
一般に言われている現象
アンテナピクト非表示 • データ通信ができているのにアンテナピクトが表示
されない
• データ通信ピクトも表示されない
セルスタンバイ 圏外時間100%表示 • データ通信ができているのに「圏外」と
判定される
バッテリー過剰消費 • バッテリーの持ちが悪いような気がする
すべての端末で 現象が発生するわけではない
‐ 4 ‐
3G (W-CDMA網) について
CS: 回線交換サービス • 音声通話・SMS
PS: パケット交換サービス • データ通信
Android端末は、両方のサービスに
登録(Registration)を行う
日本のMVNOのデータ通信サービス
では、PSのみの提供が多かった
※docomoのサービスメニューの都合上
※CSを使ったデータ通信もありますが、Androidでは使わないので割愛
‐ 5 ‐
各社のSIMのCS/PS対応
PS:○ CS:× PS:○ CS:○ PS:○ CS:○ PS:○ CS:○ PS:○ CS:×
アンテナピクト表示・圏外時間0% アンテナピクト非表示
CSに登録ができないと、各種現象が発生すると言うことが実験的に確かめられた。
※IIJmioでもSMS対応SIMを使うことでアンテナピクトが表示されることを確認。
アンテナピクト非表示
詳しくは冒頭で紹介したblogの記事を参照して下さい
‐ 6 ‐
バッテリー過剰消費はなぜ発生するのか?
バッテリーの消費が過剰になる原因 (推測)
1. 端末が、基地局に対して、位置情報を登録する (≒電波を探す) 動作は、 待機時より消費電力が多いと言うことが知られている
2. もし、端末が位置情報の登録を繰り返しているならば、 通常より消費電力が多くなると思われる
3. CSの位置情報登録に失敗して、リトライを繰り返している からバッテリーを消費するのでは?
状況証拠からの判断でしかない • 状況をつなぎ合わせると、これが原因としか考えられないのだが、
きちんとした裏が取れていない
• blog執筆時はAndroidのソースコードから原因を読み解こうとしたが、 結局肝心の部分を突き止めるには至らなかった
本当にリトライしているのか証拠が見つけ
られていない
‐ 7 ‐
別アプローチ
実機のログ採取 • adb logcatしています
Nexus 4 国内版
Android 4.3
IIJmio SIM (SMS非対応)
以下の操作を行う
機内モードON (無線OFF)
→機内モードOFF (無線ON)
オフィスの机の上で放置
‐ 8 ‐
Android内部構造
超ざっくり
Radio Interface
Layer Base Band
(通信ハードウェア)
GSM
Service Status
Tracker
W-CDMA系の機種はGSM Service Status Tracker CDMA EV-DO系の機種ではCDMA Service Status Tracker
ここの出力ログに注目
GsmSST RIL
Android (OS) 内で 通信の状態を監視している
Android (OS) と ハードウェアの仲介
‐ 9 ‐
このあたりに注目
11:24:57
(無線ON)
SMS非対応SIM
‐ 10 ‐
ポイント
DATA_REGISTRATION_STATE {0, null, null, null, 0, 20} VOICE_REGISTRATION_STATE {2, null, null, 0, null, null, null, null, null, null, null, null, null, 0, 0} DATA_REGISTRATION_STATE {1, 00ec, 0449c0d8, 11, null, 20} VOICE_REGISTRATION_STATE {2, null, null, 0, null, null, null, null, null, null, 1, null, null, 0, 0}
0 - Not registered, MT is not currently searching
a new operator to register
1 - Registered, home network
2 - Not registered, but MT is currently searching
a new operator to register
未登録だよ・電波は探してないよ
未登録だよ・電波を探してるよ →電力消費が大きい
登録済みだよ
MT: Mobile Terminal (移動端末 = Android端末のこと) home network: ローミングではないネットワーク (MVNOであってもローミングでない場合はhome network)
https://android.googlesource.com/platform/hardware/ril/+/jb-mr2.0.0-release/include/telephony/ril.h
VOICE → CS DATA → PS
‐ 11 ‐
そのまま放置 (2時間後)
13:22:23 VOICEは”2”のまま
2時間ずっと消費電力”大”のまま
SMS非対応SIM
‐ 12 ‐
さらに別のログにも注目
“UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED”
「VOICE NETWORK(CS)の状態が変化した」というBaseBandからの通知
BaseBandが電波の状況を監視していて、何か変化があった場合に、Android(OS)へ通知するという動作。 2時間の間、高頻度で発生し続けている。(約90回)
SMS非対応SIM
unsolicited: 請求していない
‐ 13 ‐
誰がトリガを引いているのか?
処理の流れは UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED ↓ VOICE_REGISTRATION_STATE
Android(OS)がトリガを引いているわけではない。BaseBandからの通知が先。
SMS非対応SIM
一回分
‐ 14 ‐
SMS対応SIMではどうなるか?
18:44:32
(無線ON)
※先ほどと同じように2時間分のログを切り出しています
SMS対応SIM
DATAもVOICEも速やかに”1”に遷移
‐ 15 ‐
そのまま放置 (2時間後)
“UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED”
は、ほとんど発生していない。
無線ON直後に連続して発生し、以後2時間記録無し。
SMS対応SIM
さらに長時間放置すると、極まれに通知が発生する様子が確認された このログの直後から、翌朝10時まで(約15時間)で7回 ※深夜で付近の端末の出入りが極端に少なかったことの影響も考えられるが、 午前9事前後の出社ラッシュの時間帯でも通知は発生していないため、周辺の 端末の影響は極めて少なかったと推測される
‐ 16 ‐
ここまでのまとめ
SMS非対応(CS無し)SIMでの挙動 • CSにRegistrationしようとして、「searching a new operator」状態を
継続している
• Registrationの繰り返しは、Android(OS)が要求しているのではなく、BaseBandが自発的に行っている
SMS対応(CS有り)SIMでの挙動 • CSへのRegistrationは速やかに成功する
• 登録に成功してしまうと、BaseBandからの通知は止む
予想通り、CS無しの場合のみリトライが発生していた
リトライの挙動はBaseBandが主導している
‐ 17 ‐
現象が発生する端末・発生しない端末
端末によって、発生する現象が異なるのは何故か? • アンテナピクト非表示
• セルスタンバイ 圏外時間100%表示
• バッテリー過剰消費
Android端末は、メーカー毎に改造が行われている • Googleが公開しているのは、あくまで「基本」
• 実際には製品毎に修正が行われている
• RIL(Radio Interface Layer)は各機種固有(Googleのものはサンプルでしかない)
• Nexusシリーズですら、オリジナルAndroidからカスタマイズが入っている
• 修正方法によって、挙動が違ってくるのはしかたが無い
• 修正後のソースコードは原則公開されていない
端末によって、発生する現象がばらばら
‐ 18 ‐
修正方法
想像その1
Radio Interface
Layer Base Band
(通信ハードウェア)
GSM
Service Status
Tracker
CSへの登録動作を抑止する (電力消費問題解決)
• バッテリーの持ちは改善しそう • 上位レイヤーから見ると「CS利用不可」 • アンテナピクトやセルスタンバイの表示は改善しない
‐ 19 ‐
修正方法
想像その2
Radio Interface
Layer Base Band
(通信ハードウェア)
GSM
Service Status
Tracker
Base Bandからの応答を読み替え、 CSに登録成功したことにする
(上位レイヤーからはCSが使えるように見える)
• アンテナピクト・セルスタンバイの表示は改善しそう • BaseBandの挙動は変らないので、バッテリ消費大 • OS上は「CS利用可」と認識されているので、アプリが誤
動作する可能性がありそう
‐ 20 ‐
修正方法
想像その3
Radio Interface
Layer Base Band
(通信ハードウェア)
GSM
Service Status
Tracker
Signal Strengs
アンテナピクトを表示している部分を書き換える (CSの登録ができていなくても、ピクトを表示する) Phone State
Lisner
• 画面表示する部分だけを書き換えるので、 アンテナピクトは表示される
• OS上は「CS利用不可」なので誤動作は起こりにくい? • BaseBandの挙動は変らないので、バッテリ消費大
‐ 21 ‐
あくまで想像ですが
修正する箇所によっては、画面表示だけが改善し、バッテ
リー消費問題は改善しないケースも考えられる
バッテリー過剰消費に対応するためには、BaseBand部の
修正が欠かせない
非公式に存在するパッチ • Android (OS) レイヤーを修正している
• 肝心のBaseBandの挙動は修正できていない
• 画面表示は改善するが、おそらく、バッテリー過剰消費の問題は解決できていないと思われる
バッテリー過剰消費を改善するには、
やはりCS(SMS対応SIM)が必要 • BaseBandが修正済みの端末であればそもそも問題は起きないが
‐ 22 ‐
どうしてこうなった
そもそも想定外
• PS onlyのサービスのことが考慮されていない
• 日本以外ではPS onlyなサービスはない?(らしい)
• Googleは日本のMVNOの事を考慮してくれないのか!
……その後、ちょっと事情が変ってきました
‐ 23 ‐
Android 4.2
‐ 24 ‐
こんな修正が
‐ 25 ‐
修正内容
Allowing to change the poll state even if only PS is avairable on the network.
There are some MVNO operators are shipping the data only SIM. It isn't
connectable with CS, but wroks for PS. If the poll is not shown on the system bar
when network registration returns STATE_OUT_OF_SERVICE for CS, user doesn't
notice whether or not they can use PS. In addition, PS might works while CS
restriction.
final boolean voice_capable = phone.getContext().getResources().getBoolean( com.android.internal.R.bool.config_voice_capable); if (!voice_capable && newGPRSState == ServiceState.STATE_IN_SERVICE) { newSS.setState (newGPRSState); }
author Junichi Monma <[email protected]> Fri Oct 26 10:22:01 2012 +0900
committer Wink Saville <[email protected]> Fri Oct 26 10:29:01 2012 -0700
最新のコードでは別のclassで実装されています ※GPRS: GSM(2G)におけるデータ通信規格 Android内では2G用語が今でも幅をきかしています
CSの状態を管理する変数 PSの状態を管理する変数
CSの状態をPSの状態で上書きする
もし、PSが利用可能であれば
config_voice_capable
の値がfalseの時
上書き
‐ 26 ‐
効能
実際のCSの状態にかかわらず、PSの状態を優先 • 割と強引な修正のような……
• ともかく、アンテナピクトは表示されるようになる
バッテリーの消費に影響が出るか? • GsmServiceTrackerレベルでの書き換えであり、
Radio Interface Layer以下の挙動は今まで通りでは?
config_voice_capableは副作用が大きい • 電話関係のアプリが無効になるなど (Android4.3では調整されている模様?)
Radio Interface
Layer Base Band
(通信ハードウェア)
GSM
Service Status
Tracker
ここの挙動が変るだけ
‐ 27 ‐
残念ながら
この設定は、一般ユーザが変更できる部分ではない
• ファームの書き換え、Root権限での作業が必要
• おそらくタブレットとスマートフォンの切り替えようとして準備された
(発見当初は) 対応端末がなかった
• Android4.2端末はNexus4ぐらい
• 日本国内では販売されず・技適も未取得
blogでも触れないまま……
‐ 28 ‐
実際に変更してみたところ (Nexus4で実験)
SMS未対応SIMでもアンテナピクトが表示される!
ただし、ログを見るとBaseBandの挙動は以前のまま
バッテリーの消費問題は改善していないと推定!
‐ 29 ‐
Android 4.3
‐ 30 ‐
Twitterなどで驚きの声
APNの設定していないのにIIJmioに繋がった!
Nexus7 (2012, 2013), Nexus4で確認 • いずれも Android 4.3
我々も驚きました
‐ 31 ‐
こんな修正が
‐ 32 ‐
修正内容
Added Japanese MVNO APN settings.
author Junichi Monma <[email protected]> Wed Feb 06 09:55:19 2013 +0900
committer Junichi Monma <[email protected]> Wed Feb 06 11:33:52 2013 +0900
• mopera U • b-mobile 3G・4G 1GB/Fair • b-mobile 3G・4G U300 • b-mobile スマホ電話 • b-mobile 4G カメレオンSIM • IIJmio
android/device/sample/etc/
apns-full-conf.xml
これはあくまで「サンプルファイル」扱い。 Nexusはサンプルをそのまま利用しているので、市販端末にもこれらのAPNが含まれている。 今後キャリアが販売するAndroid4.3端末にMVNOのAPNが含まれるかは未知数。
‐ 33 ‐
APN自動設定の仕組みを追いかける
いつの間にかこんな項目が
Android4.3以前には
なかったような?
もしかしてこれがAPN自動設定
の仕組みなのか?
GoogleのMVNOへ対する
アプローチか?
‐ 34 ‐
AndroidのAPN選択 (1)
SIMカードからIMSI
(MCC/MNC)を取得
apns-conf.xmlから
MCC/MNCに
マッチするAPNを抽出
‐ 35 ‐
AndroidのAPN選択 (2)
MVNO条件にマッチする
APNがあれば、
候補APNリストに追加
※Android 4.3で追加された部分
‐ 36 ‐
AndroidのAPN選択 (3)
SIMカードの情報が
APNの条件にマッチするか
判定
SIMカード内の以下の情報を読み取ることで、
apns-conf.xmlの中から適切なAPNを自動選択可能に
• Service Provider Name (完全一致)
• IMSI (部分マッチ可能)
• Group Identifier Level 1 (前方一致)
同じキャリア(同じMCC/MNC)を使っているMVNOでも、
識別可能な仕組みになっている
‐ 37 ‐
あれ?
サンプルのAPNリスト、iijmio.jpの条件がどれも登録さ
れてないんだけど…… • そもそもIIJから情報提供した覚えもないし
どうしてIIJmioのAPNが自動的に選択されてるんだ? • MCC/MNCだけでは、他のMVNO(docomo通信網利用)と区別がつかない
はず
• Service Provider Name
• IMSI
• Group Identifier Level 1
特に何も書いてない→
‐ 38 ‐
実は総当たりしてるだけでした……
mopera U
認証失敗
b-mobile
認証失敗
IIJmio
接続成功
途中省略してます。実際にはMCC/MNCが合致するAPNを、ファイルの上から順番にすべて試しているようです。
‐ 39 ‐
(^^;
とはいえ、動いているようです。
(初回の接続まで時間かかりますが……)
‐ 40 ‐
Googleやるじゃん
「APN設定」は、初心者には難関 • 問い合せ多いです
利用者がAPN設定を意識する事なく、
SIMカードを挿すだけで自動的に通信が可能になる • 端末内のAPNリストに列挙されている必要はあるが
SIMフリー端末でこの仕組みが有効に活用されるのでは?
MVNOを含め、多様な通信環境のことも考慮されるように
なってきている