ジャンル不定の日記です。

アプリ開発時のテスト用にAndroid-x86

引き続きAndroidのアプリ開発を勉強しながらやってるんだが、HTTP通信でHTML取得する処理のあるアプリ作ってて、
InputStreamで1byteずつ取得して1行ずつString化、charset指定のMETAタグがあったらそれ以降指定charsetでString化。
んで、内部から文字列抽出してSQLiteにデータ保存。

って感じの処理を作ったんだが、糞遅い。
最初SQLiteのBEGIN忘れてたんだが、BEGINするように修正しても、やっぱ遅い。
処理に問題があるのかと思ってコード見なおしたりしてたが、エミュレータが遅い?

初めてAVDを使った時は糞遅くて使い物にならないと思ってたが、最近使って開発のテスト用には使える速度だと思ってたんだが、
とりあえずARMエミュレータ以外の方法について調べたり考えたりしてみた。

AVDにはx86仮想デバイス用のHAXMアクセラレーターってのがあって、それ入れるとx86の仮想デバイスがKVM使って動作させられるらしいんだが、SDKから入れようとしてもLinuxは対象外となっている。
Linuxでも手動で入れる方法はあるみたいなんだが、ちょっと手順が複雑でやりたくない感じ。

ADBで操作できるならAVDでなくてもいいから、
以前ちょっとVirtualboxで使ったことあるが、Android-x86を使って母艦からADB接続できないか?
っての調べてみたが、簡単にできた。

Android-x86は最初からVirtualboxに入れてあったんだが、最新版が今年の1月リリースの4.4-r2だが、インストール済みのはもっと古そうなんでインストールしなおした。
Android-x86のisoは普通のOSインストール用のCDと変わらないんで、Android-x86のisoでCDブートすればインストーラーが起動する。
項目も少ないのでインストールは簡単だが、GRUBのインストールが選択式で初期状態がインストールしない方になってるが、Virtualboxで使うならGRUB入れる方と思う。
パーティションは最大サイズでext3一個だけ作ってGRUB入れるだけ。

入れたらHDDからリブートだが、Virtualboxのマウス統合が使えないので、マウス統合を無効化しないとカーソルが見えない。
初回起動後は言語を選択して、Wifi設定をスキップ。ネットワークはVirtualboxがエミュレートした有線LANなのでWifi不要で最初からネットワーク使える。

で、Virtualbox上のAndroid-x86へ母艦からADBで接続する方法だが、Android-x86起動中でも停止中でもどっちでもできるが、
初期状態ではVirtualboxのネットワーク設定でアダプター1がNATで作成されていると思うが、下の方にある「ポートフォワーディング」を押してルールを一個追加する。
Virtualboxのポートフォワーディング機能は、ホストのportを一個奪ってゲストに転送する機能。
ADBのportは5555の様なのでゲストのportは5555なのだが、ホストのportは5555だとAVDと被るようなので5556にした。

ポートフォワーディングを設定したら、
adb connect localhost:5556
と、adbのconnect機能でlocalhost:5556に接続すると、
adb devices
でVirtualbox上のAndroid-x86が確認でき、普通にADBで操作できる。
adb connectのport番号は省略すると5555になるが、AVDを起動しているとそっちにportが奪われちゃう。


実際にAndroid-x86にADBで制作中のアプリをインストールして試してみたが、
処理自体は速い感じなんだが、マウス統合が無くてGUIがスムーズに利用できない感じ。
AVDのARMエミュレータで遅かった処理が速度違うんで、やはりAVDのARMエミュレータが遅かったようなんだが、
Android-x86がマウス統合ができないから、どっちもどっちだなあ・・・
Android-x86にゲストモジュール入れられないかな・・・