header

2014年8月9日土曜日

AndroidのAVDの高速化を試してみた

昔AndroidのAVDを試してけどめちゃくちゃ遅くて使う気がしなかったけど、高速化する方法があるらしいので、なんとなくやってみた。途中で(自分のなかで)はまりポイントがあったので、記事として書いておく。

自分の環境:

ubuntu12.04LTS
64bit環境
SSD

(関係ないけどawesome window managerも使ってる)

参考サイト:
http://my-clip-devdiary.blogspot.com/2013/01/android64bit-ubuntu-12041lts.html
http://saku-java.be-ourselves.jp/2014/05/18/intel-x86-android-emulator-setting/

どうやら、intel x86設定にするのとSnapshotを使うといいらしい。

昔設定したので、SDKやandroidコマンドは普通に使えた。

以下のコマンドでSDKはアップデートできた。-uをつけるとno-uiになるらしい。
(sdkだけ)

android update adb
android update sdk

適当にavdを作る

android avd

上のコマンドでavdマネージャを開いたあとCreateボタン、そのあとCPU/ABI設定でintel x86を選択し。(そのまえにandroid update sdkで対象のintel x86をインストールする)必要なavdを作る。

avdのイメージができたので起動してみた。

-[10598]% emulator-x86 -avd nexus4intel
emulator: ERROR: Could not load OpenGLES emulation library: libOpenglRender.so: cannot open shared object file: No such file or directory
emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
emulator: emulator window was out of view and was recentered

http://qt-project.org/forums/viewthread/29747

libOpenglRender.soが読めないらしいので、ググったところLD_LIBRARY_PATHにパスを追加するほうがいいということで、

locate libOpenglRender.so

で調べたら、sdk/tools/libディレクトリに入っていた。

とりあえず、パスを通してもういっかい挑戦してみたら、

-[10602]% emulator-x86 -avd nexus4intel -port 5554
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory
emulator: emulator window was out of view and was recentered

のようなエラーがでた。

libGL.soがどうせ足りないんだろって思って調べた
(もしかしたら、apt-get install ia32-libsが必要かも?)

-[10659](1)% locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

x86_64版のlibGL.soのほうでパスを通しても、

Failed to load libGL.so
error libGL.so: wrong ELF class: ELFCLASS64
Failed to load libGL.so
error libGL.so: wrong ELF class: ELFCLASS64

というエラーがでるので、/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0の
symbolic link libGL.soをつくってパスを通すようにしたら
エラーはでなくなった。

最終的にはemulatorの起動は下のようなshell scriptにした

#!/bin/sh
SNAPSHOTNAME="default"
PORT=5554
LIBGL="/usr/lib/i386-linux-gnu/mesa/"
export LD_LIBRARY_PATH=$ANDROID_SDK_HOME/tools/lib/:$LIBGL:$LD_LIBRARY_PATH
echo "accessing the avd: telnet localhost ${PORT}"
# I couldn't save snapshot if I use just "emulator"(I chose intel86)
emulator-x86 -avd nexus4 -port $PORT -snapshot $SNAPSHOTNAME &
# or without snapshot
# emulator-x86 -avd nexus4 -port $PORT &

環境変数に32bit版のをまぜるのは、よくないのでemulator使うときだけまぜる
ようにした。
-avdの名前やport番号は適当にかえてください。(port番号については
emulator -help-portをいちどみたほうがいいかも)

libGL.soのディレクトリもシンボリックリンクを作ったところへかえてくださ
い。

他にはまったところとして、最初はemulatorの起動コマンドをemulatorにして
いましたが、この場合snapshotがうまく保存されませんでした。
理由はよくわかりませんが、emulator-x86を利用するとtelnetからsnapshotの
保存が可能でした。

telnet localhost port-number
# after connected to android
avd snapshot save snapshot-name

ただsnapshotといっても
saveした画面がでるのが7秒後くらい、操作うけつけるのが1分10秒後くらいで、
ん?って感じ。
試しにsnapshotなしで起動した場合でみたら、26秒くらいで操作できるようになった。

参考サイトの動画みると20秒くらいで操作できるようになってたから、普通に起動する分には成功してるっぽい。ただsnapshotは謎、どなたか見識のあるかたコメントいただければ。。。


0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news