見出し画像

【Androidアプリ開発】2:プロジェクトの作成、エミュレーターとの戦い


本記事の概要

概要

前回『クロームブック(Chromebook)にAndroid Studioをインストールする』からの続きです。

クロームブック(Chromebook)にAndroid Studioをインストールした際の『プロジェクトの作成、エミュレーターとの戦い』をここに記す。

後日談となりますがmacOSにてエミュレーター「API29」レベルで軽快に動きました。
おそらくクロームブックでもAPIレベルを29のように下げれば、上手くいくと思われます。

プロジェクトを作成する

アクセラレーションも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公式にありましたね(後から分かった)

>ChromeOS で Android Virtual Device を起動できない
>ChromeOS では、libnss3 依存関係が欠けているために、Android Virtual Device(AVD)を起動できないことがあります。AVD を正常に起動するには、sudo apt install libnss3 を実行して手動で libnss3 ライブラリをインストールします。

https://developer.android.com/studio/run/emulator-troubleshooting?hl=ja

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月時点での最新技術をぎっしりと詰め込んであるので、アプリ開発に参画するエンジニアの人は、是非ともご覧になって頂ければと思います📱


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?