DO NOT PAY FOR JAILBREAK YOUR DEVICE!

最近、『NTTドコモのSIMカードでLTEを使えるようにする』『ソフトバンクやKDDIで月額を払わなくてもテザリングができるように』などのフレーズで『CommCenter* patch』や各種キャリアバンドルをインストールする代行業者があるようで、たいへん多くの「どのような関係性があるのか」「無償で提供しているように見せかけてカネを取るのか」「いくら儲かるのか」といった問い合わせを受けています。

これらの悪質な業者と我々は、いっさい関係がありません。Jailbreakは無償で提供されるべきものであり、これを商用利用すべきものでもありません。 [続きを読む »]


2011年8月14日日曜日

GOOAPPLE 3G (レビュー編)

GOOAPPLE 3G』については、話題性がいくらあっても一般的に〝スポンサーの意向〟に触れてしまう内容なので、たぶんだれも深いことまで書かないと思います。誌面では間違いなく掲載拒否を食らうラインです。そういうわけで、ここで詳しく展開することにしました。

GOOAPPLE 3G 関連記事
GOOAPPLE 3G (レビュー編)
GOOAPPLE 3G (分解・改造編)
GOOAPPLE 3G カメラ LEDフラッシュの改善
GOOAPPLE 3G リカバリモードとブートロゴ変更

記事を公開してから、いくつか質問を受けました。代表的なものに回答します。 (8/22追記)

どこまでがネタなのか? ネタではない証左は?
このエントリに関して、いわゆる〝ねつ造画像〟というものは作成していません。『GOOAPPLE 3G』は本当に中国国内で製造・出荷され、世界に販売されている〝商品〟です。これがネタなのであれば、その存在から含めてすべてがネタなのでしょう。ネタでないことについては、このエントリの後編にあたる〝分解・改造編〟を参照して判断していただきたいと思います(ネタのために積層基板を起こしたりApple純正部品を分解するほどのヒマは……)。
どこで買えるのか?
中国では『淘宝』(Taobao)にて販売されている様子がインターネット上からも確認できます。TaobaoとYahoo! Japanが提携して『Yahoo! チャイナモール』というサービスを展開していますので、そちらから購入できるケースもあるかもしれません。日本国内においても、通信販売を行う店舗や過去には秋葉原の店頭で販売されたことがあるようです。価格的には1500元前後が2011年8月現在における相場のようですので、日本円で2万円を切っていれば買いなのではないでしょうか。
Apple製品のコピー商品の存在についてどう思うか?
中国という市場はそういうものだと思います。過去には〝SK-168〟と呼ばれる、これもiPhone 4によく似たコピー商品が話題となりました(他にも無数に存在します)。また、少なくとも『GOOAPPLE 3G』については真正品のパーツを流用したり単純に(型取り)コピーしたわけではなく、図面解析による三次元CADとNC加工によって新たに型を起こしている痕跡が見られます(内部的には形状が違っており、ほぼ99%パーツの流用がありません)。中国の技術レベルがそれだけ向上しているということでもありますし、このような完全なコピーのリスクはApple製品だけにはとどまらないのではないでしょうか。
電気通信事業法(以下略)
乙。
電波法(以下略)
煽り乙。

GOOAPPLE 3Gに触れていて、とても懐かしい〝謎パー〟という単語を思い出しました。あれも当時は微妙な扱いの商品でした。

〝謎パー〟という言葉をご存じの世代はきっと少なくともアラサー世代で、TidalwaveやHP 200LX、OASYS Pocketなどといった端末を自由闊達にハックしていた人たちではないかと思います。

時は流れて〝謎パー〟的な端末は今や山寨機に置き換わり、日本の市場においてはAndroidがメーカーの自由気ままな改造によって非互換度合いがどんどん高まって、世界から取り残されたたくさんのガラドロイドを産み出しています。

謎パーを産み出した原動力は、主流である環境をなるべくコンパクトに、見た目よく外に持ち出したいという欲求だったと思います。当時はそれが、フルキーボードを持ち横80字*縦20行の表示が出来る程度のスクリーンを持つPCだったというだけの話です。

現代においてはPCが生活の中に占める重要度は下がり、手のひらに収まるサイズの携帯端末でも画面を必要とする作業の大半がまかなえるようになりました。

筆者にとって最後の謎パーは『mbook M1』で、この役割はほぼ『iPad 2』に移行されつつあります。sshやRDPでまかなえることが多くなり、外出先でフル機能のPCがある必要性というのがほとんどなくなってしまいました。

ユーザーが従来型の携帯電話(ほとんどはSymbian OSや組み込みLinuxによるもの)のひととおりの機能に飽きたところでiPhoneが発表され、みんながiPhoneのような端末を欲するようになりました。

そのプロプライエタリさや(キャリアにとっては)厳しい導入要件などからすべてのキャリアがiPhoneを発売するわけにもいかず、そこへオープンソース開発によるAndroid OSをベースにGoogleやキャリアのカスタマイズアプリケーションを導入したAndroid端末という形態がマッチして多数産み出され、今のように非互換性に日々泣かされる開発者や、著しく収益性の上がらないサービスを提供し続けなければならないコンテンツプロバイダの悲劇を引き起こしました。

ところで元来、Android OSは組み込み向けOSです。出荷にあたってUIを変えることもアプリケーションを追加することも、何の規制もありません。電話やタブレットである必要もありません。直接的なGUIを持たないNTT東日本/西日本の提供する『光ポータブル』などもAndroid端末の一種です。

同じNTTドコモから販売されているGalaxy S IIとMEDIAS WPを使っていても、「えっNだとここ押せば出来るのに!」「サムスンって外国でしょ? なんか違うんじゃないのー」という会話がまことしやかに喫茶店で交わされる時代となりました。これからもSymbianとμLinuxのような違いを提供し続けてくれることでしょう。

さて、世界を見渡せば〝iPhoneのデザインを模倣した〟としてSamsungがAppleに訴えられたり、iPhoneが長いライセンス条文の中で同意を得たとして収集していた端末の位置情報が、Androidでは同意を得ずに収集どころかGoogleのサーバーに送信までしていたなどと、きな臭い雰囲気は漂うもののAndroid端末はiPhoneの後追いをするように売れています。

いつか出るのだろうと思われていたiPhoneそっくりという風体の端末はこれまでにもいくつか(主に中国市場で)リリースされてきましたが、〝3Gに対応して外見(ハードウェア)も中身(ソフトウェア)もそっくり〟という史上最強(最低?)のコピー商品が、今回紹介する『GOOAPPLE 3G』(谷果3G手机)です。単なるコピー商品でなく、Android OSを〝正しい組み込みOS〟として利用している点も特筆すべきだと思います。

性能と外観

『GOOAPPLE 3G』は香港の谷果有限公司という会社が作っていることになっていますが、この会社の存在を含めて謎に包まれています。端末自体のスペックはとても平凡で、現段階におけるミドルレンジ程度の性能でしかありません。

OSAndroid OS 2.2.3
CPUQUALCOMM MSM7627 600MHz
GPUAdreno 200
RAM160MB
Storage8GB (internal 256MB)
Display3.5inch 320x480pixels HVGA 24bit(16M) color
ScreenMultitouch (2-finger) self-capacitance
GPSnone(AGPS)
SensorGeomagnatic, Accelerometer, 3-axis Orientation, Proximity, Light
Camera500M pixels Pan Focus (300M?) with LED-Flash
Front camera0.3M pixels Pan Focus
Wi-FiIEEE802.11b/g
Bluetooth2.0
NetworkGSM(EDGE) 850/900/1800/1900MHz, 3G W-CDMA/UMTS HSDPA(7.2M) 850/1900/2100MHz
BatteryStandby 150hours / Talk 8hours (GSM?)
Size115.2(H) x 58.6(W) x 9.3(D) mm 135g

GPSもありませんし、カメラもパンフォーカスでホワイトバランスもほぼ調整が効きません。バッテリー容量は、分解して見たところでは1000mAhです。

特筆すべきはその筐体デザインです。iPhone 4そっくりどころか細かな寸法を含めてほぼ完全に一致します。誤差がある部分も大きいところでせいぜい0.05mmというオーダーです。

Apple純正のケースである『iPhone Bumpers』にも納めることが出来ます。また、筐体に使用されている素材も出来る限り近いものをチョイスしていて、ほぼ同じ印象しか受けません。

ケーブルもAndroid端末で一般的なmicroUSBではなく、iPhone/iPodと同じドックケーブルを使います(Apple純正品が使用できます)。

ADBもこのケーブルで実行できますが、Windowsだとドライバがないようです(MacやLinuxでは不要です)。公式フォーラムによればDell Streakのドライバが流用できるようですので、探してみると幸せになれるかもしれません。

筐体の違いを探そうとしても、間違い探しどころか重箱の隅つつきレベルでしかありません。「ドックコネクタの奥のほうにバリが!」とか「イヤースピーカーのメッシュが金属メッシュじゃない!」とか「イヤホン端子の金属部分、ちょっとだけ太くない?」とか、もう本当にどうでもよいことです。

よく見るとSIMスロットの大きさが若干だけ異なります。これは取り出してみると理由が分かります。なんと通常サイズのSIMカードが使えるのです(現在iPhone 4を使用中の方もご安心ください、GOOAPPLE 3GにはなんとmicroSIMモデルも存在します!)。

機能性として見た場合、サイレントスイッチとボリュームボタンの働きがiPhoneと若干異なります。サイレントスイッチが通常モード(オレンジのポイントが露出しない側)のときは着信音量の調整となりますが、サイレント側の場合は[+]ボタンがメニュー/[-]ボタンが戻るボタンとして働きます。これを覚えておかないとAndroid特有の操作である、メニューが出せずに途方に暮れることがあります。[+]が追加操作/[-]が戻るということになるので、比較的覚えやすいと思います。

そうそう。もうひとつ大きく違う操作があります。iPhoneにおける強制リセットはHome+Powerボタンの長押しですが、GOOAPPLE 3Gではこの操作が効きません。強制リセットはイヤホンジャックの奥のほうにボタンがありますので、爪楊枝のような細長いもので押しましょう(※付属のSIMイジェクトピンがApple製品と比べて妙な形をしているのは、実はこのためのようです)。

電源を入れると、『GOOAPPLE』ロゴのあとにドロイド君がリンゴを食べてハートにビートを刻むアニメーションが入ります。そこから先は…… フォントやサイズ感こそ若干違えど、完全にiOSのあのインタフェースの世界です。

ところで、このブートアニメーションは /system/media/bootanimation.zip が実態です。bootanimation.part1 というファイルが同じディレクトリに入っていますが、これを bootanimation.zip にリネームすると、より〝大元の〟それっぽい起動画面になります。

ソフトウェア的な内容

アプリケーションはいっぱい入っています(有償のものもある気がしますが、お国柄だと思いましょう)。列挙するのも馬鹿らしいほど入っています。『Angry Birds』に至ってはなぜか途中までクリアされたセーブデータが残っています。

標準アプリケーションに関してちょっとまとめてみましょう。類似度に関しては ◎>○>△>× という主観順位です。評価として◎でも、完全に同一というよりはよくパクっているなーという感覚です。

たとえばホーム画面に『Safari』とありますが、これはいわゆるただの標準ブラウザです。Androidなので例によってUser-Agentはなぜか〝Mobile Safari〟というアレですが、まあこれは本当に素の標準ブラウザです。

アプリ名類似度備考
LockscreenHomeボタンダブルクリックでカメラボタンが出るiOS 5先取り機能付き
Homeフォルダ機能とマルチタスクの動きが若干違う程度
Phone 
Mail 
Safari×標準ブラウザ
iPod横に傾けるとCover Flow表示も再現されます。完成度はいちばん高いのでは?
Messages 
Calendar×実体は『365日历』、ホーム画面の日付と曜日はライブ
Photos×標準ギャラリー
Camera見た目はそっくりだけど、フロントカメラ切り替えなし
YouTube×実体は『Youku』
Stocks×実体は『大智慧』
Maps×標準Maps (5.0)
Weather×実体は『墨迹天气』
Notes 
Clock× 
Calc見た目はそっくりだけど、ボタンの動作が怪しい
Compass頑張って真似てはいるけど、センサがないので機能しない
Voice Memos 
Contacts 

外見がだいぶカスタマイズされているPhoneやMessagesは一見するとAndroid標準のものとはまるで別アプリに見えますが、内部的には正しくコンテントプロバイダを呼んでいて、データは標準のストレージに記録されます。このため、別アプリからデータを扱う場合も正しく処理を行うことができます(オッ、組み込みOSっぽい!)。日本のキャリアからリリースされている端末ではこれができない独自データ形式のケースがあるので、ソフトウェアの設計思想としては素晴らしいと思います。

『Maps』に関しては、Maps 5.2.1までであれば /system/build.prop に〝ro.opengles.version=131072〟を追記することでベクターマップが利用できます。5.3以降に更新してしまうと内部的なバージョン情報が不整合となって利用できなくなってしまいますのでご注意ください。

プリインストールのサードパーティ製アプリケーションに関しては、システム領域(/system/app/)に書き込まれているためMarketでのアップデートに失敗するなど、あまりお行儀がよくありません。本来であれば /data/app/ に書かれているべきだったと思います。

ところで、SDカードには怪しいものがいっぱい収録されています。たとえば /sdcard/Tools/ や /sdcard/Yingyonghui/ あたりにはとても怪しいapkファイルがたくさん転がっています。他にも /sdcard/My Music/ や /sdcard/Videos/ なども怪しげです。お国柄だなーと思うのは /sdcard/Picture/ です(いわゆるR18画像の所持に厳しい)。

rootedに関しては『SuperOneClick』が使えます。が、Superuser.apkがイマイチ正しく動作しないので、テストが失敗したり一部アプリケーションの権限取得が失敗したりします。また、ADBによるシェルは最初からroot権限で動いているようです(システム領域である /system は /dev/block/mtdblock3 がyaffs2でマウントされていますが通常時はリードオンリーです)。

(8/28追記) ボードのリビジョンによってはrootedに使用できる手法が異なるようです。筆者の手元のV2.1筐体ではSOCが使えましたが、V.2.3の筐体では成功せず『z4root』や『universalandroot』などを使って、別の脆弱性を利用してroot権限を奪取する必要がありました。

フォントに関しては /system/fonts/DroidSansJapanese.ttf がないので、ヒラギノ角ゴ W3などがあればそれを入れるとよりあれっぽくなります(最初はいわゆる中華フォントです)。IMとしては筆者はATOKを導入していますが、購入できない向きの方々にはFlickWnnをおすすめします。

なお、ローカライズはあまり完璧ではなく、ロケール設定を〝en_JP〟などとしても完全な英語表記には切り替わらず、一部のアプリ名などが中国語のままとなります。登記上は香港の会社のようですが、開発の実体がきっと上海などの大陸側なのではないでしょうか。

ROMの吸い出し方やらアップデータやらは公開されていないので、『Titanium Backup』でバックアップしたり不要なアプリをフリーズすると、中国語で表示される謎のアプリケーション類などをホーム画面から一掃することが出来ます。

操作性

そのホーム画面は『Applestyle Home』と言うようで、その名の通りあれっぽいインタフェースとあれっぽい機能を持ちます。アイコン長押しで移動や重ねるとフォルダ作成など、操作方法はだいたい一緒です。Folder-in-folderやFive-icon-dock的なことが出来ないところも一緒です。おぞましいことに、なんと通知アイコンも表示されます。

マルチタスク機能(Appswitcher)だけちょっと違って、ホームボタンのダブルクリックではなくホームボタンの長押しです(おそらくはAndroid自体がホームボタンのダブルクリックというイベントを持っていないため?)。スイッチャーからの右スワイプでiPodコントロールや回転ロックが使えるのも一緒です。

OSがFroyoなので正式なapp2sdが使えますが、SDカードに移動したアプリケーションはホーム画面上での配置やフォルダわけを覚えてくれません。再起動した際にSDカードにあるアプリケーションはあとからホーム画面へバラバラに現れます。

音声着信時も同じです。ロック中とそれ以外で応答方法が異なる点も一緒です。着信音も一緒です。

SMSの受信時はあちらとは挙動が違って、ノティフィケーションバーへの通知となるため、画面上へのポップアップが行われません。ただ、Messagingの画面構成に関しては一緒です。

設定画面はとてもあれっぽいデザインのものになっています。あれっぽいですが、APNの設定方法などはAndroidに準じます。

あれをこうしてああすれば、日本における音声プリペイドSIMも認識できますし、SMSも利用可能です(データ通信が定額のあのMVNOはアンテナピクトが立たず圏外扱いで、ネットワークの認識だけできる状態でした)。いわゆるパーソナルホットスポット機能も持っています。

Phoneから *#*#4636#*#* へ発信することによって『Testing』を起動することができます。この画面の [Phone Information] で〝Set preferred network type〟を〝WCDMA only〟に変更し、メニューを表示して〝Select radio band〟から〝JAPAN Band〟を選択すると、(技術適合があるかどうかはともかくとして)日本国内での利用に最適化することができます。

少なくとも日本国内においては、いわゆる3G通信は現状のファームウェアでは実現できないようです。正しいAPN設定を行っても、接続しに行く段階で内部的にエラーを起こして接続を確立することができません。これは、2100MHz帯を利用する国内2キャリアとも同じです。おそらくは2GのEDGEまでしか利用できません。

正しく設定されているはずのAPNへ接続した際のログを見てみましょう。


08-** **:35:10.108 D/GSM     (212)[GsmDataConnection-1] DcInactiveState msg.what=EVENT_CONNECT
08-** **:35:10.108 D/GSM     (212)[GsmDataConnection-1] Connecting to carrier: 'SoftBank WAP' APN: 'mailwebservice.softbank.ne.jp' proxy: 'sbwapproxy.softbank.ne.jp' port: '8080
08-** **:35:10.108 D/RILJ    (212)[0359]> SETUP_DATA_CALL 1 0 mailwebservice.softbank.ne.jp softbank qceffknarlurq*** 3
08-** **:35:10.178 D/RILJ    (212)[0360]> REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:35:10.188 D/RILJ    (212)[0360]< REQUEST_GET_NEIGHBORING_CELL_IDS  [11a@-121] [4@-121]
08-** **:35:10.198 D/RILJ    (212)[0361]> REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:35:10.198 D/RILJ    (212)[0361]< REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:35:11.528 D/RILJ    (212)[UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED
08-** **:35:11.528 D/RILJ    (212)[0362]> OPERATOR
08-** **:35:11.528 D/RILJ    (212)[0363]> GPRS_REGISTRATION_STATE
08-** **:35:11.528 D/RILJ    (212)[0362]< OPERATOR {SoftBank Mobile Corp, SoftBank, 44020}
08-** **:35:11.528 D/RILJ    (212)[0364]> REGISTRATION_STATE
08-** **:35:11.528 D/RILJ    (212)[0365]> QUERY_NETWORK_SELECTION_MODE
08-** **:35:11.528 D/RILJ    (212)[0363]< GPRS_REGISTRATION_STATE {1, 2dd8, 008c5107, 3}
08-** **:35:11.538 D/RILJ    (212)[0364]< REGISTRATION_STATE {1, 2dd8, 008c5107, 3, null, null, null, null, null, null, null, null, null, 0}
08-** **:35:11.538 D/RILJ    (212)[0365]< QUERY_NETWORK_SELECTION_MODE {1}
08-** **:35:11.538 D/GSM     (212)Poll ServiceState done:  oldSS=[0 home SoftBank Mobile Corp SoftBank 44020 (manual) UMTS CSS not supported -1 -1RoamInd: -1DefRoamInd: -1EmergOnly: false] newSS=[0 home SoftBank Mobile Corp SoftBank 44020 (manual) UMTS CSS not supported -1 -1RoamInd: -1DefRoamInd: -1EmergOnly: false] oldGprs=0 newGprs=0 oldType=UMTS newType=UMTS
08-** **:35:11.808 D/RILJ    (212)[UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED
08-** **:35:11.808 D/RILJ    (212)[0366]> OPERATOR
08-** **:35:11.818 D/RILJ    (212)[0359]< SETUP_DATA_CALL error: com.android.internal.telephony.CommandException: GENERIC_FAILURE
08-** **:35:11.818 D/RILJ    (212)[0367]> GPRS_REGISTRATION_STATE
08-** **:35:11.818 D/RILJ    (212)[0368]> REGISTRATION_STATE
08-** **:35:11.828 D/GSM     (212)[GsmDataConnection-1] DcActivatingState msg.what=EVENT_SETUP_DATA_CONNECTION_DONE
08-** **:35:11.828 D/GSM     (212)[GsmDataConnection-1] DataConnection Init failed com.android.internal.telephony.CommandException: GENERIC_FAILURE
08-** **:35:11.828 D/GSM     (212)[GsmDataConnection-1] DataConnection setup result='Other error' on cid=-1
08-** **:35:11.828 D/RILJ    (212)[0369]> LAST_DATA_CALL_FAIL_CAUSE
08-** **:35:11.828 D/RILJ    (212)[0366]< OPERATOR {SoftBank Mobile Corp, SoftBank, 44020}
08-** **:35:11.828 D/RILJ    (212)[0367]< GPRS_REGISTRATION_STATE {1, 2dd8, 008c5107, 3}
08-** **:35:11.838 D/RILJ    (212)[0370]> QUERY_NETWORK_SELECTION_MODE
08-** **:35:11.848 D/RILJ    (212)[0369]< LAST_DATA_CALL_FAIL_CAUSE {29}
08-** **:35:11.848 D/GSM     (212)[GsmDataConnection-1] DcActivatingState msg.what=EVENT_GET_LAST_FAIL_DONE
08-** **:35:11.848 D/GSM     (212)[GsmDataConnection-1] DcInactiveState: setEnterNoticationParams cp,cause
08-** **:35:11.848 D/GSM     (212)[GsmDataConnection-1] DcInactiveState: enter notifyConnectCompleted
08-** **:35:11.848 D/GSM     (212)[GsmDataConnection-1] notifyConnection at 13140******** cause=Error User Autentication
08-** **:35:11.848 D/GSM     (212)GSMDataConnTrack handleMessage { what=1 when=781502 arg1=-1 obj=android.os.AsyncResult@450d70a8 }
08-** **:35:11.848 D/GSM     (212)[GsmDataConnectionTracker] PDP setup failed Error User Autentication
08-** **:35:11.848 D/RILJ    (212)[0368]< REGISTRATION_STATE {1, 2dd8, 008c5107, 3, null, null, null, null, null, null, null, null, null, 0}
08-** **:35:11.848 D/GSM     (212)[GsmDataConnectionTracker] setState: FAILED

接続開始後、2秒も経たないうちに〝PDP setup failed Error User Autentication〟というエラーを起こして接続が中断されています。どうやらGOOAPPLE 3GのRIL(かAMSS)が、AP側へ正しいユーザーID(かパスワード)を渡せていないようです。

3G通信自体に非対応なのか実装の問題なのか切り分けるために、データ契約のないSIMカードで試してみましょう。


08-** **:13:40.809 D/GSM     (220)[GsmDataConnection-1] DcInactiveState msg.what=EVENT_CONNECT
08-** **:13:40.809 D/GSM     (220)[GsmDataConnection-1] Connecting to carrier: 'SoftBank WAP' APN: 'mailwebservice.softbank.ne.jp' proxy: 'sbwapproxy.softbank.ne.jp' port: '8080
08-** **:13:40.809 D/RILJ    (220)[0103]> SETUP_DATA_CALL 1 0 mailwebservice.softbank.ne.jp softbank qceffknarlurq*** 3
08-** **:13:41.209 D/RILJ    (220)[0104]> REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:13:41.209 D/RILJ    (220)[0104]< REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:13:42.049 D/RILJ    (220)[UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED
08-** **:13:42.049 D/RILJ    (220)[0105]> OPERATOR
08-** **:13:42.049 D/RILJ    (220)[0106]> GPRS_REGISTRATION_STATE
08-** **:13:42.049 D/RILJ    (220)[0107]> REGISTRATION_STATE
08-** **:13:42.049 D/RILJ    (220)[0105]< OPERATOR {SoftBank Mobile Corp, SoftBank, 44020}
08-** **:13:42.049 D/RILJ    (220)[0106]< GPRS_REGISTRATION_STATE {1, 2dd8, 008c510c, 3}
08-** **:13:42.059 D/RILJ    (220)[0108]> QUERY_NETWORK_SELECTION_MODE
08-** **:13:42.059 D/RILJ    (220)[0107]< REGISTRATION_STATE {1, 2dd8, 008c510c, 3, null, null, null, null, null, null, null, null, null, 0}
08-** **:13:42.059 D/RILJ    (220)[0103]< SETUP_DATA_CALL error: com.android.internal.telephony.CommandException: GENERIC_FAILURE
08-** **:13:42.059 D/GSM     (220)[GsmDataConnection-1] DcActivatingState msg.what=EVENT_SETUP_DATA_CONNECTION_DONE
08-** **:13:42.059 D/GSM     (220)[GsmDataConnection-1] DataConnection Init failed com.android.internal.telephony.CommandException: GENERIC_FAILURE
08-** **:13:42.059 D/GSM     (220)[GsmDataConnection-1] DataConnection setup result='Other error' on cid=-1
08-** **:13:42.059 D/RILJ    (220)[0109]> LAST_DATA_CALL_FAIL_CAUSE
08-** **:13:42.069 D/RILJ    (220)[0108]< QUERY_NETWORK_SELECTION_MODE {1}
08-** **:13:42.069 D/GSM     (220)Poll ServiceState done:  oldSS=[0 home SoftBank Mobile Corp SoftBank 44020 (manual) UMTS CSS not supported -1 -1RoamInd: -1DefRoamInd: -1EmergOnly: false] newSS=[0 home SoftBank Mobile Corp SoftBank 44020 (manual) UMTS CSS not supported -1 -1RoamInd: -1DefRoamInd: -1EmergOnly: false] oldGprs=0 newGprs=0 oldType=UMTS newType=UMTS
08-** **:13:42.069 D/RILJ    (220)[0109]< LAST_DATA_CALL_FAIL_CAUSE {33}
08-** **:13:42.069 D/GSM     (220)[GsmDataConnection-1] DcActivatingState msg.what=EVENT_GET_LAST_FAIL_DONE
08-** **:13:42.069 D/GSM     (220)[GsmDataConnection-1] DcInactiveState: setEnterNoticationParams cp,cause
08-** **:13:42.069 D/GSM     (220)[GsmDataConnection-1] DcInactiveState: enter notifyConnectCompleted
08-** **:13:42.069 D/GSM     (220)[GsmDataConnection-1] notifyConnection at 13140******** cause=Data Not subscribed
08-** **:13:42.079 D/GSM     (220)GSMDataConnTrack handleMessage { what=1 when=35538 arg1=-1 obj=android.os.AsyncResult@450aab88 }
08-** **:13:42.079 D/GSM     (220)[GsmDataConnectionTracker] PDP setup failed Data Not subscribed
08-** **:13:42.079 D/GSM     (220)[GsmDataConnectionTracker] setState: FAILED

今度は正しく〝Data Not subscribed〟と、データ契約がない故にAPへの接続ができなかったことを認識しています。つまり、ユーザーIDのハンドリングに何らかの問題があるようです。

出荷時のAPN設定が記録されている /system/etc/apns-conf.xml を見ると、GOOAPPLE 3Gが デフォルトで持っているAPN設定のすべてにユーザーIDとパスワードがないことが確認できます。中国国内ではこのようなAPNが一般的で、もしかするとユーザーIDとパスワードのあるAPを想定した実装になっていないのかもしれません。

GOOAPPLE 3Gがデフォルト設定としてAPN情報を持っておらず、APN設定にユーザーIDとパスワードのない中国系キャリアとして『3 HK』があります。APN設定を行ってからローミング接続を試してみましょう。


08-** **:08:06.229 D/GSM     (210)[GsmDataConnectionTracker] setState: INITING
08-** **:08:06.229 D/GSM     (210)[GsmDataConnection-1] DcInactiveState msg.what=EVENT_CONNECT
08-** **:08:06.229 D/GSM     (210)[GsmDataConnection-1] Connecting to carrier: '3HK Internet' APN: 'mobile.three.com.hk' proxy: '' port: '
08-** **:08:06.239 D/RILJ    (210)[0209]> SETUP_DATA_CALL 1 0 mobile.three.com.hk   3
08-** **:08:06.279 D/RILJ    (210)[0210]> REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:08:06.289 D/RILJ    (210)[0210]< REQUEST_GET_NEIGHBORING_CELL_IDS  [66@-121] [10f@-121] [f4@-121]
08-** **:08:07.289 D/RILJ    (210)[0211]> REQUEST_SET_LOCATION_UPDATES: true
08-** **:08:07.299 D/RILJ    (210)[0211]< REQUEST_SET_LOCATION_UPDATES
08-** **:08:07.299 D/RILJ    (210)[0212]> REGISTRATION_STATE
08-** **:08:07.299 D/RILJ    (210)[0212]< REGISTRATION_STATE {5, 0035, 04110084, 9, null, null, null, null, null, null, null, null, null, 0}
08-** **:08:07.319 D/RILJ    (210)[0213]> REQUEST_SET_LOCATION_UPDATES: false
08-** **:08:07.329 D/RILJ    (210)[0213]< REQUEST_SET_LOCATION_UPDATES
08-** **:08:07.329 D/RILJ    (210)[0214]> REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:08:07.339 D/RILJ    (210)[0214]< REQUEST_GET_NEIGHBORING_CELL_IDS  [f4@-100] [66@-103] [10f@-110]
08-** **:08:07.349 D/RILJ    (210)[0215]> REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:08:07.349 D/RILJ    (210)[0215]< REQUEST_GET_NEIGHBORING_CELL_IDS
08-** **:08:14.109 D/RILJ    (210)[0209]< SETUP_DATA_CALL {0, rmnet0, 10.75.179.**}
08-** **:08:14.109 D/GSM     (210)[GsmDataConnection-1] DcActivatingState msg.what=EVENT_SETUP_DATA_CONNECTION_DONE
08-** **:08:14.109 D/GSM     (210)[GsmDataConnection-1] interface=rmnet0 ipAddress=10.75.179.** gateway= DNS1=172.20.93.1 DNS2=172.20.93.17
08-** **:08:14.109 D/GSM     (210)[GsmDataConnection-1] DataConnection setup result='SUCCESS' on cid=0
08-** **:08:14.109 D/GSM     (210)[GsmDataConnection-1] DcInactiveState: setEnterNoticationParams cp,cause
08-** **:08:14.119 D/GSM     (210)[GsmDataConnection-1] DcActiveState: enter notifyConnectCompleted
08-** **:08:14.119 D/GSM     (210)[GsmDataConnection-1] notifyConnection at 13140******** cause=No Error
08-** **:08:14.119 D/GSM     (210)GSMDataConnTrack handleMessage { what=1 when=541706 obj=android.os.AsyncResult@44ffb1d0 }
08-** **:08:14.119 D/GSM     (210)[GsmDataConnectionTracker] setState: CONNECTED

今度は正しくデータ接続が確立され、インターネットへの接続が可能となりました。やはり、ユーザーID(かパスワード)のハンドリングに問題があるようです。

残念ながら、ローミング時のアンテナピクトや3G接続のアイコンなどはきちんと作り込まれておらず、Android標準のものになってしまっています。が、データ接続はきちんとHSDPAで確立できています。

ベースバンド自体は3Gに対応(7.2M HSDPAまで)していますし、限定的な条件ながらも3G接続は可能なので、将来的にこの不具合を修正するためのアップデートが行われることに期待しましょう。音声通話とSMSのみ、という用途にはよいのではないでしょうか。

紙幅が長くなってきたので、次回エントリに『GOOAPPLE 3G 分解・改造編』を分割します。