Thursday, February 4, 2010

続: Nexus One と iPhone を SIM 1枚で運用する(MyWi編)

先日は Nexus One を親にしたテザリングでiPhoneを使ってましたが今回は逆になります。
この方法は iPhoneをjailbreakする必要があり、Nexus OneもカスタムROMにしなくてはならないため、積極的にオススメはできません。
が、既に条件を満たしているのであれば試してみるのもよいかと思います。

さて、Nexus One はカスタムROM CyanogenMod 5.0 beta3以降にします。 (参考)
それだけで準備OKです。

iPhoneのほうはJBアプリのMyWi (No Rock)というのをCydiaから入れます。しかしながらこれは有料で$9.99かかります。

MyWiはadhocネットワークでテザリングを可能にするアプリで、テザリングは純正同様にバックグラウンドで動作するので、テザリング中でも電話やネットワークが通常通りに利用できます。


また、純正テザリングは3.1.2で使えなくなってしまいましたが、MyWiをインストールすることにより再び有効化することが可能となりますので、そのために購入するのも悪くないかもしれません。

MyWiを起動したらSSIDとWEPを適当に設定して ON にします。

するとNexus Oneの無線LAN設定のところにSSIDが現れます。

WEPキーいれて接続するだけでOK。

さて、このCM5.0で実装されてるadhocネットワークのコードをみて比較してみますと、オリジナルのコードではどうやら意図的にadhocを無視して、関連するコードも省いてるようです。

抜粋
@@ -1147,9 +1167,10 @@
* Ignore adhoc, enterprise-secured, or hidden networks.
* Hidden networks show up with empty SSID.
*/
- if (AccessPointState.isAdhoc(scanResult)
- || TextUtils.isEmpty(scanResult.SSID)) {
- continue;
+ //if (AccessPointState.isAdhoc(scanResult)
+ // || TextUtils.isEmpty(scanResult.SSID)) {
+ if (TextUtils.isEmpty(scanResult.SSID)) {
+ continue;
}


大して難しくない内容なので移植してCM不要でできないかやってみようとしましたが、frameworkまで入れ替えねばならなくなり、この部分だけピンポイントで入れ替えるのが難しそうなので断念しました。


そんなわけで、今はiPhoneにSBMのSIMを差して2台を1枚のSIMで運用しております。
Nexus OneでのSBMのMMSがどうにも安定しないのでしばらくこの体制でいきます。

Tuesday, February 2, 2010

mobile power supply items

携帯端末を複数持つようになったので。

僕のような人間はスマートフォンの電池がきれると死にます。
そんなわけで、補助電源をいつも持ち歩くことにしています。

まず、旅行や超長時間の移動の際には eneloopのmobile booster KBC-L2AS

去年の暮に新型がでてiPhoneに正式対応しました。逆に旧型のだと充電できないことがあるらしいです。
長距離じゃなくても、GPSやWiFi,3Gを駆使した使い方をする時にも活躍します。
たとえば、iPhoneをGPSロガーとして使用する時とか。

次に不意に電池がやばくなってしまったときのために、eneloopのmobile stick booster

なんといっても場所をとらないのがよいです。
iPhone, Nexus Oneともに充電可能ですが、単体で電池を充電できないないので注意。
とにかくいつもカバンに忍ばせておけば、いつバッテリーがやばくなっても安心できます。

ケーブルはリール式のコンパクトなやつがおすすめですね。
iPhoneのモノは多数発売されてるのでいいとして、Nexus OneのMicro-USB Bタイプのものはミヤビックスのものしか見つかりませんでした。


また、Micro-USB変換アダプタをつかえばMini-USBのものが使えます。

Mini-USB Bのケーブルは世の中に大量に溢れいてるのでこれも一つ持っておくといいかもしれません。
ただし、中には粗悪な変換ケーブルもあったりするので気を付けた方がいいかもしれません。
これを経由したmobile stick boosterでのNexus One充電は問題なくできました。

そんなわけで、わたくしは KBC-D1ASとケーブルx2、変換アダプタをいつも持ち歩いています。
KBC-D1ASでアルカリ乾電池が使えればさらによいのですが…。パッケージの説明書によると効率はeneloopより落ちるらしいです。
緊急用ならアリかもしれません。

Saturday, January 30, 2010

Nexus One に custom rom を install する

カスタムROMについては最悪端末を文鎮にしてしまう恐れがあるので自己責任で。

Nexus One用のカスタムROMがいくつか出ているので試すことにします。
ついでに、カーネルの入れ替えもします。

今回試すのは CyanogenMod 5.0 for Nexus One
現時点で beta3 + kernel update (2.6.32-59940)がでています。
http://forum.xda-developers.com/showthread.php?t=623496
* Can be used with or without Google applications
* Latest 2.6.29.6 kernel which supports tethering, vpn, and other modules (cifs, nfs, aufs, fuse)
* Clean shudown/startup system
* NO APPS2SD. I've implemented a hack that will store the dalvik-cache of system apps in /cache, which saves you ~40MB on /data
* Built in USB tether
* Minor graphical enhancements and an excellent wallpaper by Prash
* ARM NEON optimizations (mostly to the pixelflinger library) which have not been included in the stock build yet
* Includes BusyBox, htop, nano, powertop, openvpn, and all engineering commandline utilities
* Multitouch browser using native API and code from Luke Hutchison. More MT integration coming.
* FLAC audio support from Kenny Root
* Phone enhancements from Cytown
* Contacts enhancements from Wysie
* Perform zipalign-on-install of applications
* DeskClock tweaks- longer autosilence and "require unlock" option
* Compcache is available via Spare Parts, but I don't recommend it
* Massive APN list
* Huge collection of ringtones and audio
* All available locales are included thanks to PsychoBoy
* Many other bugfixes and tweaks from AOSP contributors

こんな感じでいろいろ変わります。
普通に使う範囲だと、マルチタッチブラウザとかUSBテザリングあたりが大きいですかね。JITを有効化することによる高速化も大きいかもしれません。

さて。導入には root化あるいはbootloaderのunlockが前提となります。

フォーラムから update-cm-5.0-N1-beta3-signed.zip をダウンロード、純正アプリが必要であれば、gapps-passion-ERD79-signed.zip もダウンロードしてSDカードにコピーしておきます。

まず fastboot でリカバリモードを起動します。
Wipe により設定情報の掃除を行います。あらゆる初期状態に戻ってしまうので注意。

次に Flash zip from sdcardで update-cm-5.0-N1-beta3-signed.zip を導入、その後必要であれば gapps-passion-ERD79-signed.zip を。
これで reboot すれば導入は終りですが、フォーラムによるとそのままCM5.0b3のカーネルではバッテリーと充電関連に不具合があり、充電できなくなったり、バッテリーが死ぬとの報告がいくつかみられます。

そこでDwang氏がビルドしたカーネル2.6.32 に差し替えます。
カーネルを替えると、無線LANドライバのモジュールがloadができなくなるので、一緒においてある bcm4329.ko もダウンロードしておきます。

fastbootで起動する。
次のコマンドによりカーネルを入れ替える。
$ sudo ./fastboot-linux flash zimage zImage
$ sudo ./fastboot-linux reboot

zImage はダウンロードしたカーネル。
起動したら無線LANが使えなくなってるのを確認。
adbによりダウンロードしておいたbcm4329.koをぶち込みます。
$ ./adb remount
$ ./adb shell cp /system/lib/modules/bcm4329.ko /system/lib/modules/bcm4329.ko.29
$ ./adb push bcm4329.ko /system/lib/modules/
$ ./adb reboot

2行目はバックアップです。
これで無線LANが使えるようになっているはずです。



どうやらこのカーネルはhimemが有効になっているようで、合計メモリが395MB(395,152kB)になります


個人的にカスタムロムを導入する目的は前述のリストにはなく、アドホックネットワークへの参加が大きいです。
その詳細はまた別のエントリで。

ちなみにこのROMはまだベータなのでxdaのフォーラムは随時追っかけておいた方がよさそうです。

Sunday, January 24, 2010

Nexus One で SBM の MMS を送受信する

※追記(2010/04/13): このエントリはもはや古いので新しい情報を参照してください。

※追記(2010/01/26): 嘘記事書いてゴメンナサイ。結局Mms.apkのUser Agentも書きかえないとダメなようです。

下のほうでアプリいれればいいみたいなことを書いてましたが、全くダメでした。
理由はサードパーティのSMS/MMSアプリをいれても、受信自体は純正のcom.android.mms経由で行っているためです。
送信だけは自前でやってるらしく、ちゃんとできたように見えます。

そこで、純正の SMS/MMSアプリのUser Agent Stringを書き換えた物に入れ替えます。
androidのソースにあるpackages/apps/Mms/res/xml/mms_config.xmlを書き換えて、このxmlだけ差し替えたものです。

Download: Mms.apk
MD5: 4084a145043cc83c0a63043f3a990f09

Android SDKにあるtools/adbを使ってぶち込みます。 (要 root)
$ ./tools/adb remount
remount succeeded
$ ./tools/adb shell cp /system/app/Mms.apk /system/app/Mms.apk.orig
$ ./tools/adb push ~/Downloads/Mms.apk /system/app/
997 KB/s (272550 bytes in 0.266s)
$ ./tools/adb reboot

以上でMMSが使えるようになります。
ただ、純正のSMS/MMSアプリってグループメッセージを扱えないようなので、iPhoneのモノには劣ります。
(追記終わり)

Nexus OneでMMSを使うための設定などを。
iPhone用SBM黒SIMを使います。

まず APN の設定は適切にされていることを前提。


純正の「メッセージ」アプリは User Agent を変更できないので使わない。
自動受信とかOFFにしとくといいかも。

マーケットから Handcent SMS なるアプリケーションをダウンロード。


メニューのSettingsからわりと下のほうにあるCustom User-Agentを選び、iPhone (3.0)にしとく。


Sms Receive SettingsにあるRetrieve message settingを選びAuto-retrieveを有効にする。


以上。

通知ポップアップ時の件名は日本語だと化けちゃうみたい。
けどスレッドの表示では問題なさげ。画像の受信もできた。

Saturday, January 23, 2010

Nexus OneとiPhoneを1枚のSIMで運用する

SIM1枚でNexus OneとiPhoneを運用しようというエントリです。


まず、そのためにはどんな方法があるのか。まっとーな方法はおそらくどちらかを親にしたテザリング。

1. iPhoneを親にするケース
1-1. 純正テザリング
1-2. pdanet
1-3. MyWi

このうち純正はUSBかBTになり、AndroidでBTの子テザはできない。USBなんて仮にできたとしてもイヤだ。
pdanetは有料JBアプリで、しかも子の側でadhocな無線LANを作らなくてはならない。そしてそれはAndroidではできない。
となると残るはMyWiになるが、これもJB必須で有料。で、実はAndroidはadhocネットワークに参加すらできない。

2. Nexus Oneを親にするケース
2-1. USBやBTのテザリングはあるにはあるがiPhone側で利用できないので無理
2-2. pdanet for AndroidはUSBかBTのみ
2-3. Wireless Tether for Root Users.

つうわけで、2-3に絞られる。これはiPhoneのMyWiと同じで、adhocな無線LANでテザリングする。iPhoneでadhocネットワークに参加するのは問題なくできる。(adhocネットワークを作ることは出来ない)
とりあず無料で使える。
ただ、Android 2.1用はまだ安定していない。

ともかく試すことにします。
rootとってることが前提。

Nexus Oneのブラウザで http://code.google.com/p/android-wifi-tether/に行き、Nexus One用のリンクからwireless_tether_2_0_pre1-eclair.apkをダウンロード。
kernel updateはひとまず要らない。NETFILTERを有効にしたkernelらしいので、Access Controlで使うのかも。LinuxではNATするのにも必要なんだけど、入れなくても動いた。おかしい。まぁいい。


そのままリストからタップするとインストールできるのでインストールする。


終わったら開く。
ここで、suがどうのでAllow Denyの選択を迫られることがあるのでとにかくAllowする。
うまく起動出来ずに強制終了か待機を迫られたら、強制終了して、再び開く。何度か繰り返してると起動できる。

メニューボタンを押して設定をする。設定しないでも動きそうではあるが、無防備になってしまうのでやめましょう。
WEPはすでに脆弱で意味がなくなってきてはいるのだが、ないよりはマシ。

変更するのは Wireless Encryptionを有効にする、Change Passphrase でパスフレーズを適当に決める。
あとはSSIDを確認、あるいは変更しておく。

これで-Press to start tethering-をタップすればサービスが開始される。


iPhone側では、Wi-Fiネットワークの設定で先程設定したSSIDのネットワークが出てくるはずなので、パスフレーズを入れて接続すればOK。

結果としてどうなるかといえば、Nexus Oneが無線LANルータのように振舞ってくれる。(が、adhocなので厳密には違う)
テザリング中でもNexus Oneでネットを使えるし、あるいは電話していてもiPhone側でネットが使えなくなるようなことはなかった。

難点は、たまにクライアント側でIPの更新が出来ないことがあるということ。これは既知の問題で、クライアント側でWi-FiをOFFってONにすればいいらしい。
もうひとつはたまに起動出来ずに待機か強制終了の選択になってしまうこと。なんどか繰り返してると起動するのだけど。
あとはわりと電池を喰らう。WiFiと3Gを同時に使うのだから仕方がない。

とにかく表面的には問題なさげに使えているという状況。

蛇足だが PSP の場合、インターネット接続はインフラストラクチャの無線LANでなくてはならないので繋げられないようだ。

Friday, January 22, 2010

Nexus Oneのroot奪取とフォント入れ替え

標準の日本語フォントキモいんで。
Nexus Oneでroot取りからフォント入れ替えまでのメモ。

Android SDKを手に入れる
http://developer.android.com/sdk/index.html
まだつかわない。

bootloaderをunlockする。
注意することはunlockしたら戻せない、サポートを受けるときに影響あるかも。そんなことは知った事ではない。
How to unlock the bootloader on your Nexus One
この辺を読んで、fastboot.zip をダウンロード。

まずNexus OneをUSBで接続。
1.電源長押しででるメニューから電源を切る。
2.ボリュームダウンボタン+電源で電源を入れる
3.メニューがでてくるので、ボリュームキーで FASTBOOT を選択し、電源ボタンで決定する。
(写真はUNLOCK済なんだけどまぁ一緒)
4. LinuxやMacはターミナルから fastboot-linux なりfastboot-mac なりを実行。Windowsはコマンドライン。
$ cd fastboot/
$ sudo ./fastboot-linux oem unlock
sudoしないとダメだった。(Windowsでは管理者権限?)
5. Nexus Oneの画面が変わるので "YES. unlock bootloader" をボリュームキーで選んで電源ボタンを押し決定。
6. rebootする.

次にリカバリイメージの書き換えを行う。
[Recovery] [30-May-2010] RA-nexus-v1.7.0.1
この辺を読んで、recovery-RA-nexus-v1.7.0.1.imgをダウンロード。(MD5sum: b5dbd17b153530247e7b90dfe501b9dd)
さっきと同様に1から3までやって、fastbootでリカバリイメージを書き換える。
$ sudo ./fastboot-linux flash recovery ~/Downloads/recovery-RA-nexus-v1.7.0.1.img
(~/Downloadsは適宜読み替え)

次にrooted.
[N1 Addon] Nexus One Addon 0.1 - Makin' Bacon [01/08/2010]
この辺を読んで、nexus-addon-0.1-signed.zipをダウンロード。 (MD5sum: 7b37d4313ea4a6dc2107352d837380df)
どういう手段でもいいのでSDカードにコピーしとく。
前項同様に、1から2までやって、今度はRECOVERYを選択。
(映り込みすげえな)
リカバリーモードはトラックボールで操作することになる。項目を戻るにはボリュームダウンキー。
まず Backup/Restore を選んで、Nand backup を選択。バックアップをする。
次に Flash zip from sdcard を選択すると SDCARD:nexus-addon-0.1-signed.zip とでてくるのでそのまま選択。

以上でroot化と呼ばれる作業は終わり。PowerOffして再起動。

いよいよフォントを入れ替える。
ちなみに普通のTTFが使えるようだ。
M+IPAとか好きなのを持ってきてくださいよ。
MS GothicとかメイリオもつかえるけどMSのライセンス的にどうなのか。

Nexus OneをUSBデバッグモードにしておく。
設定 → アプリケーション → 開発 → USBデバッグ。
で、最初にもってきていたSDKに含まれるコマンドadbを使う。
$ cd android-sdk-linux/tools
$ ./adb remount
remount succeeded
$ ./adb push ~/Downloads/custom-font.ttf /system/fonts/DroidSansJapanese.ttf
$ ./adb reboot

何をやっているのかの説明は割愛。

以上。

まぁいいんじゃなかろうか。

redsn0w 0.9beta3を試してみた

最初に言っとく。人柱的なことはやってない。

redsn0w 0.9beta3が出たので試してみた。
今回やったのは
・jailbreak 済 iPhone3GS (旧bootrom)
・verbose booting
ようするにboot中に何が起こっているか知りたかったので試してみたというわけです。

説明によると、
If you're already jailbroken (by whatever means), redsn0w can still be used to change your boot logos, revert back to the stock logos, or switch verbose booting on and off. By selecting “Already Pwned” you can bypass the steps normally needed to enter the jailbroken state.

すでにjailbreak済のiPhoneにはboot logoの変更などに使えるとあります。
つまり、jailbreak環境には影響を与えることはない、と読み取れます。
んで、それには“Already Pwned”をえらんどけばOKってことのようです。

では試してみます。
必要なものはredsn0wと3.1.2のipsw。already pwnedでもipswは必要。

途中で出てくる選択肢でチョイスするもの。

あとはそのまま進めばOK。

reboot するとこんな感じに。

何が起こっているのかわかります。
起動にえらく時間かかってるときに役立ちそう。

データが消えたり設定がリセットされるような事象も起きず、なんの問題もなさそうです。

いまのところ。