【Androidアプリ開発】2:プロジェクトの作成、エミュレーターとの戦い
本記事の概要
概要
前回『クロームブック(Chromebook)にAndroid Studioをインストールする』からの続きです。
クロームブック(Chromebook)にAndroid Studioをインストールした際の『プロジェクトの作成、エミュレーターとの戦い』をここに記す。
プロジェクトを作成する
アクセラレーションもOKだったので、Android Studioを使っていきましょう。
「New Project」をクリック。
「Empty Activity」を選択。
「Next」ボタン押下。
このように出るので。
●Name(アプリ名)
Name(アプリ名)に「test」と入力。
そうすると
Package Name(パッケージ名)
Save Location(保存先)
が自動入力される。
パッケージ名の「com.example.test」ですが、アプリIDになるのでリリースの際には世界で一意のものにする必要があります。
通常は独自ドメインを取得し、その逆ドメインでcom.exampleの箇所を置き換えます。
学習の段階ではこのままでも良いでしょう。
●Mimimum SDK
Mimimum SDKでは、対象となるAndroidの最小レベルAPIを指定する。
要するに「どこまで古いAndroid機種に対応するか」であるが、余り範囲を広げすぎると、色々と制限が掛かるので、とりあえずはデフォルトのままで良いだろう。
●Help me choose
ちなみに「Help me choose」をクリックすると、Androidのシェアがリアルタイムで表示される。
やはり、Andriod11が多そうですね。
iOSと違って、Andriodってバージョンアップ出来ない機種も多いよね❓
その辺り、iOSとは戦略が変わってきそう。
「Finish」ボタン押下。
Android SDK がダウンロードされるので待つ。
「Finish」ボタン押下。
開発画面が立ち上がるけど、時間が掛かる模様。
エディタエリアが表示される。
プロジェクトエリアは loading … 状態。
結構時間が掛かる。
「Android ▼」押下で出てくるけど待っていたほうが良さげ。
しばらく待ってやっと出てくる。
とにかく、プロジェクトエリアの「loading …」がやたら長い。
やっとのことで立ち上がったまでは良いが …
うーむ、何がなんだかさっぱり分からんぞ💡
エミュレーターとの戦い
いきなりビルドエラー
取り敢えず右上の実行ボタン「 ▶ 」を押してみようかな。
ポチッとな。
… 少し待ったが何も起こらない。
ビルドに時間が掛かっている❓
と思いきや下部のバーにエラーメッセージ。
分かりづらいのう。
The emulator process for AVD Pixel_3a_API_34_extension_level_7_x86_64 has terminated.
クリックすると左側に出てくる。
うぉー、面倒くさい。
プロジェクト作成直後のビルドでこれですか。
The emulator process for AVD XXX has terminated.
別枠にある、エミュレーターエリア内の「 ▶ 」はプロジェクト関係無しで、単にエミュレーター自体を立ち上げるものと思われる。
こっちもポチッとな。
The emulator process for AVD Pixel_3a_API_34_extension_level_7_x86_64 has terminated.
ああ、これはプロジェクトどうこうより、エミュレーター自体の立ち上げに失敗しているパターンですね。
ここから『The emulator process for AVD XXX has terminated.』(XXX 部分はデバイス名)との壮絶な戦いが始まる。
コールドブート/idea.log
●コールドブート
「︙」→「Cold Boot Now」をやってみる。
『電源が完全に切れている状態からの起動』を意味する。
試したが、やはり駄目。
●idea.log
次に(上段メニュ)ー Help → Show Log in File Manager を開く
idea.logには色々な情報ログ(エラー含む)が格納されている。
パスとしては「 /home/ユーザー名/.cache/Google/AndroidStudio2022.3/log/ 」にあるみたいですね。
idea.log内を調査。
と言っても「error」を文字列検索しただけだが。
error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
この部分が怪しいぞ💡
libnss3.soが無いと言っている。
libnss3の事は下記サイトを参考
まあLinux特有のセキュリティ補助的なライブラリやね。
また、下部バーには「Terminal」があり、ここからターミナルを使えるので便利。
$ sudo apt install libnss3
早速、libnss3.soをインストールする
まだ駄目だ
ここまで試した事(Cold Boot/idea.log/libnss3)
まだ解決してないが、ここまでの対応方法をメモ書きしておく。
●Cold Boot
「Cold Boot Now」をやってみよう。
『電源が完全に切れている状態からの起動』を意味する。
●idea.log
(上段メニュー) Help → Show Log in File Manager
にはログファイルがある。
パス:/home/ユーザー名/.cache/Google/AndroidStudio2022.3/log/
idea.log などを調べてみる事(「error」等の文字列検索)
●libnss3
Linuxの場合、libnss3(セキュリティ補助的なライブラリ)をインストールする事。
【補足】
ていうか、「libnss3」について、Android Developer公式にありましたね(後から分かった)
Pixel7を追加
て言うかさ、プリセット(最初から入っている)されているエミュレーターの『Pixel_3a_API_34_extension_level_7_x86_64』を他のものにした方が良いんじゃないのかな❓
エミュレーターを追加しますか。
使い方がよく分からんが、まあ手探りで何とかなるでしょ。
「CreateDevice」をクリック
端末選択画面っぽい。
「Pixel7」にしておこうか。
これはOSのことかな。
ていうかSystem Imageの「Image」って何?
「OS」って書けや。
「R」とやらが紺色で最初から選択されているので、これで良いかな。
… がしかし、この「最初から選択されている」から大丈夫だろうという先入観が悲劇を産む。
(ヒント:ABIの部分)
小さくて分かりづらいが、Rのすぐ右にある「↓」(下矢印に下線のアイコン)でダウンロード出来る。
なお、下の方のこのメッセージはダウンロードすると消えます。
ダウンロードが始まる
ダウンロードだけでも1.1GB。
これが展開されると、どの位のサイズになるのやら。
ダウンロード完了
ダウンロードボタンも消える。
「Next」ボタン押下。
「Finish」ボタン押下。
ちなみに「Graphics: Automatic」という箇所だが、後から「Software」に変えたりすて試すことになる。
何故か2個表示されているし
うーん、Pixel7も駄目か
「Pixel7のAPI30」だが、駄目だった。
でね、気になることがあってさ。
使っているクロームブックのアーキテクチャ。
「 Architecture: x86_64 」
・・・ さっき作成の際のABI箇所だけどさ「 x86 」だったよね
そりゃ駄目じゃん。
ただ気になるのはプリセットである「Pixel_3aのAPI34」は「 x86_64 」。
これも駄目だった訳でして。
Pixel7(x86_64)を追加
ともあれ、Pixel7のx86_64版を追加する。
System Imageの画面のタブでグループ分けされている。
こんなふうに。
ではx86_64版をダウンロードしましょう。
で、Pixel7(x86_64)で試したのですが、結局駄目でした。
Wipe Data
引き続き調査を進める。
エミュレーターのトラブル解決の有力候補として「Wipe Data」なるものがあった。
この「Wipe Data」は、エミュレーター内のデーターをまっさらにし、イメージ的にはいわゆる「工場出荷時の状態へとリセット」するもの。
グラフィックカード設定
引き続き、エミュレーターのエラー関連で調べると、何気に出てくるのが「グラフィックカード設定」
エミュレーターの編集ボタン(鉛筆のアイコン)で編集出来る。
Graphics項目は、グラフィックカードとエミュレーターの関連性を指定。
この「Graphics: Automatic」をHardwareやSoftwareに変えて試してみる。
が、結局駄目だった。
ただ、この設定の変更で改善されたという例もあるので、試す価値はあるだろう。
SDKの確認
SDK(Software Development Kit)の確認をしてみる。
よく分からんが、新機能を使いたいときに調整するのかな
「SDK Tools」タブをクリック
今回、エミュレーターのエラーだから余り関係ないかな。
警告とかも無いし。
Build Output
今回、プロジェクト通さず、エミュレーター立ち上げ自体のエラーなので、ビルドは関係ないが「Build Output」なるものを発見。
下部バーより「Build」を選択。
Buildエリアが出るので「Build Output」タグを選択。
多分、ビルド出力の表示であろう。まあ覚えておく。
DeviceFrame
●DeviceFrame
デバイスの外枠。
関係なさそうだがこれも試す。
でも、やっぱ駄目だった。
エミュレーターの容量でパンクしていた
依然として消えぬ「The emulator process for AVD XXX has terminated.」エラー。
「Cold Boot」「idea.log調査」「libnss3追加」「ABI(CPUアーキテクチャ)」「Wipe Data」「グラフィックカード設定」など試したが全然駄目。
ふと、ディスク容量を見てみると。
97%って。エミュレーター起動時はさらに圧迫するのでどう考えても足りない。
エミュレーター自体は ./Android/Sdk/system-images 内に格納されている。
エミュレーター3つだけで9.69GB🤣
あのさあ、ゲストOSなんて1GB食うのにもキツイ訳なんだからさあ。
ここで内訳を見てみましょう
#システムイメージ全体
$ du -sh ./Android/Sdk/system-images
#Pixel_3a_API_34_extension_level_7_x86_64(Android Studio のプリセット)
$ du -sh ./Android/Sdk/system-images/android-34
#追加1回目:Pixel_7_API_30(x86)
$ du -sh ./Android/Sdk/system-images/android-30/google_apis_playstore
#追加2回目:Pixel_7_API_30(x86_64)
$ du -sh ./Android/Sdk/system-images/android-30/aosp_atd
4.2GB:Pixel_3a(プリセット)API34のx86_64
2.5GB:Pixel_7のAPI_30のx86
3.2GB:Pixel_7のAPI_30のx86_64
エミュレーターを入れると言うことは、AndroidのOSそのものを入れるようなもの。
何度も言うようだが、クロームブックの場合、ゲストOSでこれしなきゃいけない。
お話になりませんわ。
取り敢えず、全てのエミュレーターを削除する。
●system-imagesディレクトリ内も削除すること。
Android Studio上からだけ削除してもエミュレーター自体は残っているので、./Android/Sdk/system-images 内も綺麗さっぱり消します。
Pixel5を試す
もっと軽いものを試したい。
Pixel5をやってみるか。
余り古すぎても何なのでAPIレベルは28辺りにしておく。
ABI(Application Binary Interface)では「x86_64」に指定する。
ABIの指定は、落とし穴なので要注意だ。
これも1.0GBあるのね。
今度は、何故か3つ表示されるという。
(その後、Android Studio再起動で、1つ表示に修正されました)
おっ、いい感じかも。
来た来た、来たぞー❗
… と、思いきや
Timed out after 300seconds waiting for emulator to come online.
あー、なになに。
300秒待っても出来なかったので止めました、だって。
いや、勝手に諦めるなよ
繰り返すと変なのが出くる。
Encryption unsuccessful
それでも、滅気ずに何度も繰り返すし、やっと起動自体はされるも
「Encryption unsuccessful」
いやだ、何これ怖い😱
【結論】そもそもCPUが貧弱
そもそも、クロームブックのCPUが貧弱なのではないだろうか。
$ top
topコマンドは、CPUの負荷状態をリアルタイムで表示してくれる。
「C425TA」のCPUは「Core m3-8100Y」
クロームブックはモバイル(ノートPC)なので、バッテリーの持ちを考慮しなければならない。
よって、極力「消費電力を抑える」ため m3 に白羽の矢が立つ。
処理性能が高い → 消費電力が大きい(デスクトップ向け)
処理性能が低い → 消費電力が小さい(モバイル向け)
一長一短ではある。
よしっ、決めた。
エミュレーターは捨てよう。
ちなみにプレビューでも「インタラクティブモード」でも一部アクション動作の確認が出来る。
DeviceExplorer
エミュレーターとの戦いで、色んなメニューをクリックして見つけたのが「DeviceExplorer」である。
エミュレーター「Pixel5」の中身。
まあ結局「Encryption unsuccessful」表示のみで動かせなかったが、中身は見れる模様。
おそらく、エミュレータだけでなく、実機の中身もみれそうなので、後で試したい。
まあ、こういうのもあると覚えておこう。
CPU Profiler
また、調査中こういうのも見つける。
( CPU Profiler を使用して CPU アクティビティを検査する )
やってみましょう。
(上段メニュー) View → Tool Window → Profiler
今は特に表示されていない。
実機に接続した場合に表示されるのかな。
何だろうね、これ。
CPU使用率の検査で使うみたいだが。
まあこれも、時間のある時に試したい。
【まとめ】エミュレータまとめ
●前提
・コンテナ容量
Linuxコンテナ自体の容量は最低でも20GB。
・事前にCPUアーキテクチャを調べておく
lscpuコマンドなどで、CPUアーキテクチャを調べておく。
System ImageのABI項目のチェックに必要となる。
●エラーの場合、試したいこと
・再起動
OS自体(ここではLinuxコンテナ)の再起動
Android Studioの再起動
・アクセラレーション
前記事の目次「ハードウェア アクセラレーションの設定」に具体例を書いてます。
・libnss3
Linuxの場合、libnss3(セキュリティ補助的なライブラリ)をインストールする事。
・Cold Boot
Cold Boot Nowを試す。
・idea.log
(上段メニュー) Help → Show Log in File Manager
にはログファイルがある。
パス:/home/ユーザー名/.cache/Google/AndroidStudio2022.3/log/
idea.log を調査する。
・Wipe Data
Wipe Dataを試す。
・グラフィックカード設定
エミュレーターの編集にて「Graphics: Automatic」をHardwareやSoftwareに変えて試してみる。
・ディスク使用率やCPU使用率をチェック
エミュレーター起動の際に、defコマンド(ディスク使用率)やtopコマンド(CPU使用率)で監視しよう。
・tmpディレクトリにクラッシュレポートを削除
公式によると、tmpディレクトリにクラッシュレポートがあると不具合をおこす場合もあるらしいので、確認し削除すること。
●結論
エミュレーター1つで4GBの容量を食う。
CPU処理速度の問題もある。
スペックにもよるが、クロームブックの場合、基本的にエミュレーターは厳しい。
他の方法で動作確認をしよう。
どの道、LinuxコンテナすなわちゲストOSで動かしているので、エミュレーターが使えたとしても、カメラアプリとかのテストは実機便りになるであろう。
●インタラクティブモードを使えば良い
先にも書いたが、簡単なアクション動作確認ならプレビューでも「インタラクティブモード」で出来る(インタラクティブモードは他記事にて書きます)
●その他
直接解決ではないが後から試したいもの。
「Build Output」
「DeviceExplorer」
「CPU Profiler」
※ これらは目次にもあり
流石にエミュレーターが使えないと非効率的なので、macOSでやる事にしました。
悪党苦戦の連続ではありましたが、それが血となり肉となり、かなりの知識と経験値が身につきました。
ありがとう❗クロームブック💻
なお「プレビュー機能」「実機テスト」「APKファイル(野良アプリなどで使用)」の記事が続きますが、これらもクロームブックを使用しています。
それが終わったらmacOSでの作業ですかね🍎
著書
『 プログラマーにおくるAndroidアプリ開発の入門書 』
2024年6月時点での最新技術をぎっしりと詰め込んであるので、アプリ開発に参画するエンジニアの人は、是非ともご覧になって頂ければと思います📱
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?