ExpoでAndroidアプリを動かすまでの果てしなき戦い:エラーの山を乗り越えて
React NativeとExpoを使って、念願のAndroidアプリ開発に着手!「npx expo run:android」とコマンドを叩けば、すぐにエミュレータが立ち上がってアプリが動くはず……。そう思っていた時期が私にもありました。しかし、目の前に立ちはだかったのは、予想をはるかに超えるエラーの壁でした。
「There was a problem loading the project.」から始まり、次々に現れる難題。まるで巨大なパズルを解くように、一つ一つエラーを潰していった記録です。
序章:プロジェクトが読み込めない!始まりの絶望
プロジェクトを立ち上げて最初に遭遇したのは、「There was a problem loading the project.」という、なんとも漠然としたエラーでした。具体的に何が悪いのかも分からず、まさに暗闇の中を手探りするような状態。
解決への道筋:
最初は途方に暮れましたが、このエラーはExpoプロジェクトの基本的な依存関係やNode.jsのバージョンに起因することが多いと判明。Node.jsのバージョン管理ツール(例えば nvm
や volta
)を使って、安定版のNode.js(今回の場合は推奨バージョン)を再インストールし、依存関係をクリアにするために rm -rf node_modules
と npm install
(または yarn install
) を実行。さらに expo start --clear
でExpoのキャッシュもクリアすることで、プロジェクトは無事に読み込まれるようになりました。この一歩が、長い戦いの始まりでした。
第一章:Androidビルドの壁、ADBの不在
プロジェクトは読み込めるようになったものの、いざ「npx expo run:android
」を実行すると、今度はAndroid関連のエラーが噴出。特に印象的だったのは「adb
コマンドが見つからない」というもの。Android開発の根幹を支えるADB(Android Debug Bridge)が動いていないのですから、アプリがエミュレータに届くはずもありません。
解決への道筋:
この問題は、Android SDKのパスがシステムに正しく認識されていないことが原因でした。
-
ANDROID_HOME
環境変数の設定: Android SDKがインストールされているディレクトリ(例:C:\Users\radga\AppData\Local\Android\Sdk
)を指すよう、ANDROID_HOME
環境変数を設定しました。 -
Path
環境変数への追加: ADBの実行ファイルがあるplatform-tools
ディレクトリ(例:%ANDROID_HOME%\platform-tools
)をPath
環境変数に追加しました。 - ターミナルの再起動: 環境変数の変更をシステムに認識させるため、必ず新しいターミナルを開き直しました。
これでADBが使えるようになり、一安心…と思ったのも束の間でした。
第二章:ビルドツールの破損とNinjaの失踪
ADBが動くようになったと思いきや、次は「Build-tool 35.0.0 is corrupted. Remove and install again using the SDK Manager.
」というエラーと、「Could not find Ninja on PATH or in SDK CMake bin folders.
」というエラーが連続して発生。どうやらAndroidのビルドツール自体に問題があるようです。
解決への道筋:
これらの問題はAndroid StudioのSDK Managerが鍵を握っていました。
-
Build-Toolsの再インストール:
SDK Managerの「SDK Tools」タブから「Android SDK Build-Tools 35.0.0」を一度アンインストールし、再度インストールし直しました。これにより、破損していたaapt.exe
などのツールが正常な状態で再配置されました。 -
CMakeとNinjaのインストール:
同様にSDK Managerの「SDK Tools」タブで、「CMake」にチェックを入れてインストールしました。react-native-reanimated
のようなネイティブモジュールをビルドする際に必要なNinjaは、通常CMakeの中に含まれているため、これで解決。LLDBは必須ではないと知り、いったん保留しました。
第三章:パスの長さ制限という落とし穴
ビルドツールを整備し、ようやくネイティブビルドが走り出したかと思えば、「ninja: error: mkdir(src/main/cpp/worklets/CMakeFiles/worklets.dir/C_/General/General/1_programming/3_tw-mokumoku/1_app/lifeline-expo-app): No such file or directory
」というエラーに直面。長々と続くパスの中に奇妙な C_
という記述が見え、途方に暮れました。
解決への道筋:
これはWindows特有のパスの長さ制限や、特定のビルドツールが長いパスを正しく扱えない問題でした。
-
プロジェクトの移動:
思い切ってプロジェクトフォルダを、より短い、シンプルでスペースや日本語を含まないパス(例:C:\it\0_app\lifeline
)に移動しました。 -
キャッシュのクリアと再インストール:
パス変更後、android
ディレクトリでgradlew clean
を実行し、node_modules
を削除してnpm install
を再実行。そしてexpo start --clear
でExpoキャッシュもクリアしました。
この「移動」という大胆な一手で、ついにビルドが最後まで走り切る光明が見えました。
第四章:最後の砦、インストールの障壁
ビルドは成功したものの、最終ステップのインストールでまさかのエラー。「INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package fyi.mk_mokumoku.app.lifeline signatures do not match previously installed version; ignoring!
」と「INSTALL_FAILED_USER_RESTRICTED: Install canceled by user
」という二段構えの攻撃を受けました。
解決への道筋:
これはビルドの問題ではなく、デバイス側の問題でした。
-
既存アプリのアンインストール:
INSTALL_FAILED_UPDATE_INCOMPATIBLE
は、以前インストールされていた(異なる署名を持つ)同じパッケージ名のアプリが残っているために発生します。エミュレータのアプリ一覧から対象のアプリをアンインストールするか、adb uninstall <パッケージ名>
コマンドで強制的に削除しました。 -
「提供元不明のアプリのインストール」の許可:
INSTALL_FAILED_USER_RESTRICTED
は、Androidのセキュリティ機能によるものです。「設定」→「アプリと通知(またはセキュリティ)」→「特別なアプリアクセス」→「不明なアプリのインストール」と進み、ADBや関連するシステムプロセスからのインストールを許可する設定をオンにしました。
これらの設定変更後、再度 npx expo run:android
を実行すると、ついに!アプリがエミュレータにインストールされ、無事に起動しました!
終わりに:エラーは成長の糧
「There was a problem loading the project.」から始まった長いエラーとの戦い。一つ一つのエラーメッセージを読み解き、適切な解決策を探し、試行錯誤を繰り返す日々でした。正直、心が折れそうになる瞬間も何度もありました。
しかし、この経験を通して、Android開発環境のセットアップ、Gradle、ADB、Nativeモジュールのビルドプロセス、Androidのセキュリティ設定に至るまで、深い理解を得ることができました。エラーは、単なる問題ではなく、知識を深めるための貴重な機会だったと今は感じています。
もし今、あなたが同じようなエラーの泥沼にハマっているなら、諦めないでください。一つずつ、着実に解決していけば、必ず道は開けます。この経験が、誰かのエラー解決の助けになれば幸いです。