t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Android開発環境構築で丸一日ハマった ~ Android Virtual Device(AVD)のディスプレイがエミュレーターに収まらない。

表記の件、こういうことである。

f:id:t-hom:20151230110048p:plain

これはAndroid Emulatorの起動画面である。androidと書かれているのだが、aとdが隠れてしまっている。

ナンダコレハ。

今回使用したインストーラーは「android-studio-bundle-141.2288178-windows.exe」。
本日時点で公式から取得できる最新版だ。

Googleで「Android AVD はみ出す」「Android AVD サイズ」などと検索してもエミュレーターそのものがPCのディスプレイに収まらない症状ばかり。

違う、そうじゃないんだ。

探しているのは、エミュレーターに収まらないケースである。

ちなみに、いちおうPCのディスプレイに収まらないときの対策として画面スケールを色々と変更してみたけれど、当然ながら上記の症状には全く効果がなかった。

調べ方が悪いのか、解決策はおろか、同様の症状すらヒットせず。

しかしイロイロ試しているうちに起動後のアイコンサイズなどは正常になったので、一応改善されたと思われる。
相変わらず起動中のロゴはンドロイのままであるが。。

以下、そのイロイロについて。

経緯

ひょんなことからAndroid開発を学習することになり、以下の書籍を買ってきた。

アプリを作ろう!  Android入門 Android Studio版 Android5対応

アプリを作ろう! Android入門 Android Studio版 Android5対応

Amazonでのレビューはイマイチだが、評価の低い方は主に開発環境のセットアップ方法が古いことに対しての指摘であるが、書籍である以上、情報が古くなるのは仕方がない。2015年8月に初版が発行されたばかりなので、この書籍が古いんじゃなくてAndroid Studio側の開発が早すぎるんだ。(悪いことではないが)

実際に書店で手に取ってみたところ見出しやスクリーンショット、項番が工夫されていて非常に読みやすい。環境構築の情報が古いとはいえ、書籍の構成やセットアップ後の進め方に関してはよく出来ていると思う。

ということで、今のところ私はこの本について好評価である。

※あくまで現時点の印象である。読み進めるうちに「このク○が!」とならないとも限らないので、鵜呑みにはしないで欲しい。

セットアップ

そもそも初っ端から思い通りにはいかなかった。

Android Studioのインストール中、「Failed to install Intel HAXM. For details, please check the installation log」というエラーが発生。
f:id:t-hom:20151230112459p:plain

まあ、HAXMは後から個別に入れられるようなので、とりあえずOKを押してインストールを継続。

調べたところ、BIOSからIntel Virtualization Technologyを有効にする必要があるとのこと。
BIOSとな。。私はPC分かるから良いけれど、初心者にはハードル高くないか?

そして次に「The Following SDK Component was not installed」というメッセージが。
f:id:t-hom:20151230113121p:plain

Retryするとすんなり入った模様。この時点で少々イラっときている。

HAXMのインストール

BIOSからIntel VTを有効にして、Intelのサイト(以下)よりhaxm-windows_v6_0_1.zip (6.0.1)を入手してインストール。

Intel® Hardware Accelerated Execution Manager (Intel® HAXM) | Intel® Software

※ただしそもそもCPUがIntelじゃない場合やVTをサポートしていない場合があるので、その場合はあきらめてARM CPUのエミュレーションで動かすことになると思われる。

Android Virtual Deviceの起動

最初に起動したときは、待てども待てどもロゴ画面から起動せず、とりあえず放置して寝たら朝になってまだndroiのロゴだった。
この時点ですでにおかしいが、気を取り直して起動しなおし。すると、何度やっても以下の表示がでてクラッシュした。

f:id:t-hom:20151230114107p:plain

色々と思考錯誤のうえ、私の環境ではUse Host GPUにチェックを入れたまま起動したらクラッシュするようだった。

Use Host GPUを外した設定がこちら。
f:id:t-hom:20151230114048p:plain

そして、この設定で起動はしてきたものの、明らかにサイズがおかしく、レイアウトがメチャクチャに。。
f:id:t-hom:20151230151649p:plain

この後やったことは、Andoid SDK単体で最新版をダウンロードしてきて、sdkフォルダのtools配下にあるemulator-x86.exeを差し替えたこと。

それと、一度Android 4.0.3をターゲットにして起動したら、おかしなエラーが出つつも(SS撮り忘れ)正常なサイズで起動した。

それ以降の起動ではエラーが出ず、サイズも正常に起動するようになった。Android 4.0.3を起動した際のエラーで何かしらの設定変更が走ったのかもしれない。

試しにAndroid 6.0で起動しても、起動後のアイコンなどは正常なサイズである。ただし、起動時のロゴが切れている事象は直らなかった。

再検証

事象の再現性を確認するため、一旦ユーザー設定「C:\Users\thom\.android」を削除して実行してみたが、事象は再現せず。(つまり改善されたまま)

そこで、一度Android Studioのアンインストールを実施した。アンインストール画面でSDKとユーザー設定も抹消する。

再インストール時にIntel HAXMのチェックは外しておく。これは別途インストール済なので再インストール不要だ。おかげで最初のエラー「Failed to install Intel HAXM. For details, please check the installation log」は出なくなった。

しかし「The Following SDK Component was not installed」は再現。Retryで何事もなく完了。

そして画面レイアウトがメチャクチャになる症状も発生した。

この後、サイトから取得した最新のSDKandroid-sdk_r24.3.4-windows.zip」から「emulator-x86.exe」だけ抜き出して置き換えてみた。

もともとAndroid Studioと同時にインストールされた方は、「emulator-x86_old.exe」にリネーム。
f:id:t-hom:20151230155226p:plain

なんと、単体ダウンロードした方のサイズが明らかに小さい!

そしてこれで事象が改善された。
f:id:t-hom:20151230154928p:plain

それからもう一度検証するためexeを元に戻すと今度はそもそもエミュレーターの画面すら起動しない事態に。。
複数バージョンのexeを実行したためプロファイルが壊れてしまったのかもしれない。
再度、ユーザー設定「C:\Users\thom\.android」を削除して実行してみたところ、レイアウトが崩れる事象が再現した。

ということで犯人はemulator-x86.exeだった。

別の問題

先ほど上書き貼り付けした「emulator-x86.exe」のプレビューアイコンが古いものになってしまった。
f:id:t-hom:20151230191712p:plain
小さいアイコンは普通なのだが、左下のプレビューがおかしい。実はこれまて書いた以外にも古いSDKからアイコンを持って来たりしたのだが、その古いアイコンになってしまうのだ。

中アイコン表示にすると、ほら。一匹だけ違う。。
f:id:t-hom:20151230192041p:plain

その後色々試行錯誤しているうちに、ファイル名を変更すると、他のアイコンと同じ単色アンドロイドになり、戻すとまたこのアイコンになってしまう。

あぁ、アイコンキャッシュか!
これまでアイコンキャッシュはフォルダごとの隠しファイル「Thumbs.db」にキャッシュされると思っていたので、その可能性は気づかなかった。どうやらThumbs.dbにキャッシュされるのはネットワークフォルダの場合で、ローカルの場合は%LocalAppData%\Microsoft\Windows\Explorerにキャッシュされるらしい。

といっても手で削除するのではなく、ディスククリーンアップツールを使用する。
※スタートメニュー→全てのプログラム→アクセサリ→システムツール→ディスククリーンアップ

縮小表示にチェックを入れて実行。
f:id:t-hom:20151230192547p:plain

…改善せず。

次にアイコンキャッシュを削除

%userprofile%\appdata\localへ移動し、IconCache.dbを抹消。

…改善せず。

ひょっとして再起動がいるのか。。アイコンキャッシュファイルがクリアされたところで、すでにメモリに読み込まれているキャッシュは有効かもしれない。

ただPC全体再起動は面倒くさいので、タスクマネージャからexplorer.exeを終了させ、再度タスクマネージャのファイル→新しいタスクの実行にexplorerと入力して実行。

これでようやく改善された。

クリーンにしたい

exeをひとつだけ差し替えるというのは周りのファイルとの兼ね合いでどんなトラブルに見舞われるかわからない。
どうせならダウンロードしてきたsdkをまるごと差し替えようと思いついて差し替えたのだが。。

今度はAVDの画面で選択できるCPUが無い。
f:id:t-hom:20151230194722p:plain

ああそうか。。個別に入手しないといけないんだ。。

気を取り直し、SDK ManagerからビルドツールやAndroid 5.0.1のIntelイメージをダウンロード。

必要事項を設定して起動。

エミュレーターの画面が真っ黒でandroidのロゴすら出ない。。
f:id:t-hom:20151230203742p:plain

時間がかかっているだけかなと思い、放置して晩飯の買い出しに。

…20分後

「ただいま~」

f:id:t-hom:20151230203742p:plain

シイイイイイイット!!
※すみません。取り乱しました。m(_ _)m

この後さらに全部アンインストール・インストールし、exeの差し替え方式に戻してうまく起動するのを確認し、SDKのセットアップは完了ということにした。

まとめ

文章にするとあっという間の出来事だが、実際には開発環境構築でまるまる一日かかっている。エミュレーターの起動そのものが遅く、一度の起動で2~3分かかる為だ。

しかし今回のことでだいぶ環境構築の経験値はアップしたと思う。一度うまくいったのにわざわざ再検証までしたのは、何が起きたのかはっきりさせて、人に説明できるようにしておくためである。

書籍の解説どおりすんなりインストールできた場合には得られない経験である。SDKについて調べ、Intelの仮想化技術について調べ、Host GPUについて調べ、Androidの複数バージョンのエミュレーターをインストールし、SkinとScaleの組み合わせをひととおり試し、SDKのexeを差し替え、直接関係のないアイコンキャッシュの問題まで解決した。

まったく。いい勉強になった。

シイイイイイイット!!

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。