小ネタ 2009-005

Google Android Dev Phone 1を使ってみる

GoogleのAndroid Dev Phone 1を入手(2009年1月)。色々使ってみた内容をメモ代わりに書いておく。


1. 初期設定

 開発用ケータイなので、特定キャリア向けのSIMロックがされておらず、好きなキャリアで自由に色々使うことが可能である。
 3GのSIM(U-SIM)であればよいので、日本だとドコモかソフトバンクのSIMを使うことができるそうだ。
 しかし、最初にSIMを入れてアクティべーション(サインアップ)をしなければ、全機能がロックされて使うことができない。
 自分が持っているソフトバンクのSIMは、グローバルコールプランの契約のものしか持ってないので、とりあえずこれで試してみた。
 これだとデータ通信できないプランなので当然の結果だが、アクティべーションはできなかった。

 いろいろ調べてみると、アクティべーションなしに使う方法があるそうだ。
 Android Dev Phone 1では、USBでPCに接続してデバッグする機能が最初から有効になっている。
 そのおかげで、SDKのツールを使うとPCからAndroidのコンソールに入ることができるのである。
 しかも、suコマンドでパスワードなしで管理者権限でコマンド発行ができるのである。
 これを利用して、SIMなしでWiFi経由でサインアップするには、以下のようにすればよい。
 $ su
 # cd /data/data/com.android.providers.settings/databases
 # sqlite3 settings.db
 で、SQLiteでAndroidシステムのデータベース(Windowsでのレジストリデータベースのようなもの)を開く。
 次に、
 sqlite> INSERT INTO system (name, value) VALUES ('device_provisioned', 1);
 として、device_provisionedという項目に1を設定する。
 ここで一度再起動し、次に、以下のコマンドで、設定画面を開いてWiFiの設定をする。
 $ am start -a android.intent.action.MAIN -n com.android.settings/.Settings
 あとは、無線LAN経由で通常のアクティべーションができた。

 サインアップしたあとは普通にグローバルコールプランのSIMを挿して電話として使って、データ通信はWiFiのみで使うことにする。



2. 壁紙等をカスタマイズしてみた

 最初、壁紙をAndroidのマスコットキャラクターの壁紙にしようとしたのだが、設定が分からず、方法を調べてみた。

 
 (Androidのマスコットキャラクターなのだが、ロボットにしか見えない)

 壁紙として任意の画像ファイルを指定したいのだが、初期状態のままではプリセット画像の中からしか選択することができない。
 Marketから無料アプリで任意の画像を設定できるアプリがあるので、そちらをインストールすると壁紙が好きなように変更できる。

 痛Android (痛いアンドロイド)にしてみた。まだ壁紙だけだが。
 

 (後日加筆 2009-09-01)
 Android擬人化で「杏藤ぐぐる(あんどう ぐぐる)」という女の子のキャラクターが存在するらしい。壁紙がダウンロードできる


3. ゲームアプリで遊んでみた

 Marketで、CP Girls Spider(beta)という萌えキャラクターっぽいアイコンの付いたゲームアプリがあったので、インストールしてみた。
 ケータイ少女ソリティアというものらしい。
 とりあえずパネルモードをクリアした。タッチパネルの反応があまり良くない感じ。
 なんか時々エラーが出るし。betaだから仕方ないのか。
 



4. Javaアプリの中身

 Android SDKとEclipseをPCにインストールすれば、JavaでAndroid用アプリを作ることができる。
 Marketからインストールしたアプリのソースとか見ることができないのだろうか。あるいはエラーを直せないだろうか。
 アプリの.apkファイルをmicroSDカードにバックアップするアプリがあるので、.apkファイルを取り出してみた。
 .apkファイルの拡張子を.zipにリネームして中身を見てみる。
 META-INFフォルダと、resフォルダ、AndroidManifest.xmlというXMLファイルとclasses.dexというファイルとresources.arscというファイルがあるようだ。
 XMLファイルはGUI部分の設定ファイルで、dexファイルがプログラムコードで、resが画像や音楽やボイスなどのデータらしい。
 dexファイルの中に.jarファイルが入っているようなのだが、取り出しかたが分からない。
 jarファイルをdxという署名ツールで処理するとdexファイルに変換されるのだが、逆の手順はどうやるのだろうか?
 もしjarファイルを出せたら、jarの中の.classファイルをjava逆コンパイラにかけると..javaというソースが得られるかもしれないのだそうだ。

 ちなみに、AndroidのJavaアプリは独自仕様なので、ケータイ用のJavaアプリとはソースレベルから全く互換性がない。

 (後日加筆)
 dexファイルを逆処理するソフトでdedexterというソフトがあるそうだ。 http://sourceforge.jp/projects/sfnet_dedexer/

 dexファイルのフォーマットの解説 詳解Dexファイルフォーマット http://www.slideshare.net/kmt-t/dex-12983097



5. Linuxネイティブのバイナリ

 MarketからTerminal Emulatorというアプリをインストールすると、Linuxのコンソールを使うことができる。
 
 UNIX系の基本的なコマンドはあらかじめ入っているかと思ったら、cpコマンドが入っていない。ファイルのコピーができないので困る。(catコマンドやddコマンドで代用はできる)

 ソースを用意してARM用クロスコンパイラを使ってコンパイルして、生成されたバイナリをインストールすれば使うことができるらしい。
 クロスコンパイラはいろいろ面倒なので、ARM用Linux環境を作ってネイティブのコンパイラを使う方が分かりやすいかもしれない。
 玄人志向のKurobox-ProでDebian 5.0 Lennyを使うとネイティブ実行できるバイナリを作れるそうだ。
 2月14日にDebian 5.0が正式リリースされるので、玄箱Proにインストールしてみようと思う。
 

 →やってみた



6. Android カーネルのビルド

 Androidはソースが公開されているので、ARM用の開発環境があればビルドすることができるはずである。
 いろいろ検索するとクロックアップ改造してビルドしたりする例もあるようだ。



7. Android Dev Phone 1を使ってみた雑感

 トラックボールが使いにくい。特にトラックボールを押し込むクリック操作でカーソルが動いてしまって別の項目を誤爆で選択することがある。
 Marketなど、トラックボールが使えない場面がある。トラックボールを操作すればよいのかタッチパネルを操作すればよいのかユーザーが迷うUIは良くないと思った。
 キーボードがあるので、LinuxZaurusのようなポケットサイズのLinux機としてみれば面白いのかもしれない。
 キーボードを使ってUNIX由来のrogueやNethackというゲームを動かしてみようかと思った。

 自分の場合、iPhoneが海外で日本より先に発売されたので、GSM版iPhone(2G)を入手して、公式SDKが出てなかったので非公式SDKを使ってまで、「そろばん」アプリとかを実際に作ってみた。UIとしてマルチタッチとモーションセンサーが内蔵された初の携帯機種として面白いのでやってみようと思ったからである。
 Android Dev Phoneは、特に端末側はそういう目新しいものが無いように思える。



(後日加筆 2009-05-17)
 Android Dev Phone 1 のファームウェアを1.5にアップデートしてみた。特に使い勝手とかは変わらない感じだ。Widgetなどを使ってみると違いがわかるのかもしれない。

 アップデートの手順は、このあたりを参考にした。
 microSDカードにファームウェアのアップデートデータをupdate.zipという名前で保存して、Home+Powerで起動してリカバリーモードでファームウェアを書き換えた。



8. Android開発者向けチャージ済みSIMパッケージ

 日本通信bmobileからAndroid用のプリペイドSIM「BM-DC1-500MGDD」が出たので入手した。(2009-08-01)
 データ通信専用なので通話はできず、データ通信専用。
 



9. BeagleBoard

 BeagleBoardというマイコンボードでAndroidを動かすのを試してみた。(2009-08-16)
 今回は、既にビルドされたAndroidを使ったのだが、自前でビルドしたものを試すことも可能。
 Android Dev Phone 1のファームウェア書き換えをしないでも、気軽に試すことができる。



10. suコマンドをインストールする

 Android Dev Phone 1のファームウェアを1.5にアップデートしたので、suコマンドが制限されてしまっている。PCとUSB接続してdebug用のソフトを動かしているときだけsuコマンドでroot権限を使うことができ、それ以外でスタンドアローンのTerminalを使っているときには権限が許可されないというエラーを表示し、動作しない。
 ファームウェア1.5に入っているsuコマンドをhack品に差し替えれば、ファームウェア1.0と同様にsuコマンドが使えるようになるというのを聞いたので試してみた。(2009-08-30)

 HTC-Magic用のsuコマンドを配布しているサイトでsuコマンドを入手した。suのhack品はこれのことだろうか?
 インストールする手順は、上記のサイトに書いてあるとおり、
 adb push su /data/local で、PC上のファイルをDev Phone 1の/data/localに転送して、
 adb shell でシェルコマンド入力にして、
 $ su
 # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
 # cd /system/xbin
 # mv su original_su
 # cat /data/local/su > su
 # chmod 6755 su
 というコマンドで、suコマンドをインストールした。

 
 suコマンドをつかってみた写真

 Android Dev Phone 1は、開発用携帯電話なので楽にインストールできた。
 DoCoMoから出ている市販の携帯電話HT-03Aでも、脆弱性を利用してsuコマンドをインストールする方法が見つかったらしい。




11. ファームウェア 1.6 (Donut)へのアップデート

 Android Dev Phone 1 のファームウェアを1.6 (Donut)にアップデートしてみた。(2009-10-03)
 HTCで配布されているものを使った。
  

 アップデートしたら多少問題が発生した。

 
 YouTubeアプリのアイコンが変わってしまい、起動しようとすると「Application is not installed on your phone.」というエラーで起動しない。
 デスクトップに置いてあるアイコンはWindowsのショートカットのようなもので、実体となるYouTubeアプリが壊れているわけではないと予想される。
 おそらくYouTubeアプリの実行ファイル名が変わってしまったか何かで、ショートカットのリンク先が見つからなくなってしまったようだ。
 対処方法は、ショートカットを一旦削除して、再度作り直せば復旧できた。

 あと1つ問題なのは、Android Marketアプリの動作が異常に遅いことである。
 通信に異常に時間が掛かっている感じで、アプリのアップデートなどしようとしたら異常に待たされて、タイムアウトでアップデートに失敗したりする。Market以外のアプリはYouTubeやGoogleMap(street view)などは普通の速度で動作している。
 とりあえず原因不明である。

 (後日加筆) バージョン1.6にアップデートしたら、日本無線bmobileのデータ通信用SIMが使えなくなってしまった。これも大きな問題である。



12. fastbootコマンドで、ファームウェアを一旦ダウングレード&再度ファームウェア1.6へ書き換え

 Android Dev Phone1のファームウェアを1.5から1.6にアップデートしたら調子が悪くなってしまったので、1.5にダウングレードしようと思った。
 リカバリーモードからのファームウェア書き換えでダウングレードしようとしたら、エラーで書き換えできなかった。

 ファームウェアの書き換え方法には、リカバリーモードを使った方法以外に、fastbootを使った完全書き換えする方法があるのでこちらを試してみた。
 WindwosのPCで、AndroidのUSBドライバと、Android SDKのDebugコンソールツールに含まれるDLLと、fastboot.exeを用意した。

 特定の組み合わせのボタンを押しながらDevPhone1の電源を入れると、fastbootモードで起動する。
 fastbootモードで起動したDevPhone1をPCと接続し、fastbootコマンドで、FLASHの読み書きやパーティションの初期化等ができるはずだ。
 ところが、fastbootコマンドがうまく動かず、< waiting for device >という表示で止まってしまい、コマンドが通らない。

 どうも調べてみると、fastbootコマンドが不安定なのは、あちこちで起こっている現象らしい。検索すると対処方法のヒントが見つかったので、試した。


 Android Dev Phone1のCameraキーを押しながら電源を入れて起動するとserialモードで起動する。
 serialモードで一旦起動したあとで、USBケーブルでPCと接続し、この状態でbackキーを押すとfastbootモードに移行する。
 serialモード経由のfastbootモードだと、DevPhone1側のUSBのドライバの挙動(バージョン?)が微妙に変化するようで、初回だけUSBドライバを再度インストールを要求してくるので、ドライバをインストールする。
 fastbootモードでPCに接続できたら、PCでfastbootコマンドを使うと今度は、コマンドがちゃんと通るようになった。

 fastboot -wコマンドで、一部のパーティションなどの消去(wipe)を行う。そうしないとファームウェア書き換え後の動作が不安定になることがあるそうだ。(前に、リカバリーモードでファームウェアを1.6に書き換えた後に不安定になったのは、wipeをすれば直ったのかもしれない。このときはそれに気が付かなかった)
 消去ができたら、次はファームウェアの書き換えを行う。
 ところが、書き換えの途中でエラーで止まってしまった!
 
 FAILED (status read failed)と表示されて止まってしまった。再度コマンドを入れても< waiting for device >の表示が出て応答しない。
 この状態で、仕方がないのでDevPhone1の電池を抜いて、再度電源を入れてみたのだが、OS(Android)が起動しない。レンガ化(brick)したようだ。


 非常に焦ったのだが、serialモードやfastbootモードでは起動することができたので、再度まったく同じ手順を繰り返してファームウェアの書き換えを試みた。
 何度やってもうまくいかないと思ったが、5回目くらいの再試行でなんとか書き換えができて、OSが起動できた。
 ファームウェア書き換えでAndroid 1.5に戻すこができたが、各種個人設定とかダウンロードしたアプリとか全部消去されて、まっさらな状態になってしまった。再度アクティべーションをしなくてはならない。
 Android 1.5以降だと、このwebページ冒頭に書いたようなhackを使わなくてもアクティべーションを一旦スキップして無線LANの設定をすることができる。


 しばらくAndroid 1.5で使っていたのだが、Google Gogglesなどの新アプリが1.6で無いと使えないので、再度1.6に書き換えることにした。


 FASTBOOTモードを使って、ファームウェアをAndroid 1.6に書き換えた。
 方法は、上記のfastbootコマンドの使い方とまったく一緒で、不安定な方法なのだが、何度か繰り返してファームウェアを1.6に書き換えることができた。
 まっさらな状態でのAndroid 1.6だと、リカバリーモードでのアップデートしたときと違ってちゃんと安定して動作している。
 ただし、日本無線bmobileのデータ通信SIMカードが使えないのは前と一緒だ。



13. Android バージョン1.6にアップデートした状態で、日本無線bmobileのデータ通信用SIMを使う

 Android 1.6でbmobileを使えるようになる方法というのが見つかったそうだ。(2010-05-03)
 ・Android 1.6でbmobileが動いた http://komugi.net/archives/2010/05/03182013.php

 Android Dev Phone 1(Firmware 1.6)で試してみた。

 libhtc_ril.soを、bmobileやWillcom core 3Gが動作するバージョンのものに差し替えればよいということで、

 USBでPCに接続して、
 > adb root
 > adb remount
 > adb pull /system/lib/libhtc_ril.so libhtc_ril_so_backup
 > adb push libhtc_ril.so /system/lib
 > adb reboot
 という操作で書き換えた。

 結果、ちゃんとbmobileが使えるようになった。


 (後日加筆)
 GDD-Phoneも同様に差し替えが可能なので、差し替えた。
 adb remountコマンドが動かないので、手順を変えてadb shell上で
 mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
 というコマンドでマウントして、作業した。



14. カスタマイズ

 MoreLocale2というアプリを入れると、日本語ロケールが使用でき、日本語対応にすることができる。

 ADW.Launcher(donut)というホームアプリを入れると、Android 2.0風のデスクトップ機能を使うことができる。



- See Also -

マイコンボードBeagleBoardでAndroidを動かしてみる
Android実機上でLinuxのネイティブバイナリを動かしてみる
iPhoneの勝手アプリを作ってみる - その2 そろばん
iPhoneの勝手アプリを作ってみる - その1 おみくじ
iPhoneの勝手アプリをインストールする方法
iPhoneでファミコンのエミュレータを動かしてみる
Vodafoneのケータイ702NKで遊ぶ