T-file

一歩踏み出す勇気を全力で応援するブログ

expo build:androidできない!?解決方法を解説していく!【ReactNative + EXPO 2021/9】

こんにちは、ReactNativeとEXPOを利用しアプリ開発しているtakaです。

3ヶ月ほど放置していたアプリケーションでbuildが実行できなくなりました。

今回の記事では、その解決方法を解説していきます。

$ expo build:android

expoアプリの立ち上げも同様にできません。

$ expo start

その時の解決方法をこの記事では解説していきます。

状況

EXPOを利用し作成していたReactNativeアプリがあります。
3ヶ月ほど前は問題なく、「expo build:android」を実行できていたのですが、久しぶりに実行しようとすると以下のエラーが出ました。

ERROR: Node.js v10.19.0 is no longer supported.

expo-cli supports following Node.js versions:
* >=12.13.0 <13.0.0 (Maintenance LTS)
* >=14.0.0 <15.0.0 (Active LTS)
* >=15.0.0 <17.0.0 (Current Release)

ふむふむ、書いてある通りNode.jsの今使っているバージョンがv10.19.0で古くなったっぽいですね。

バージョンアップしてくれと書いてあります。

ちなみにLTSは(long-term supportの略で長期サポートという意味です)

  1. Maintenance LTS=最低限のサポート期間
  2. ACTIVE LTS=長期サポート対象期間
  3. Current Release=最新版

解決方法

まず言われた通り、Node.jsのバージョンを変更しましょう。

今のバージョンを一応確認します。

$ nodebrew ls
v8.12.0
v8.17.0
v9.11.1
v10.19.0

current: v10.19.0

v10.19.0ですね。

それでは新しいNode.jsのバージョンを入れます。

$ nodebrew install-binary v12.22.3

ちゃんと入ったか確認。

$ nodebrew ls
v8.12.0
v8.17.0
v9.11.1
v10.19.0
v12.22.3 //<-追加された

current: v10.19.0

ちゃんと入っていますね。

バージョンを切り替える。

$ nodebrew use v12.22.3

もう一度expo build:androidを実行して見ます。

$ expo build:android
Unable to find expo in this project - have you run yarn / npm install yet?

expoが入っていないだと?
expoのバージョンを確認します。

$ expo --version
4.12.0

あるではないか。

調べてみると、package.json内に記載されているパッケージのバージョンをアップデートしないといけないようだ。

このコマンドでバージョンのインストールしたパッケージに新しいバージョンが存在するかどうか確認します。

$ npm outdated

詳しくはこちら

こちらのコマンドでパッケージのバージョンをアップデートしていきます。

$ npx -p npm-check-updates -c "ncu"

パッケージのアップデートができました。
それではexpo build:androidしてみます。

$ expo build:android
Cannot determine which native SDK version your project uses because the module `expo` is not installed. Please install it with `yarn add expo` and try again.

npm installする必要がありました…

$ npm install

tips!

package.jsonよりpackage-lock.jsonの方を優先します。npm installうまくできない場合はpackage-lock.jsonを削除しよう。

rm -rf package-lock.json

で消せます。

これでOKか?

$ expo build:android
✔ Choose the build type you would like: › apk
Checking if there is a build in progress...

› Expo SDK: 42.0.0
› Release channel: default
› Workflow: Managed

Building optimized bundles and generating sourcemaps...
Starting Metro Bundler
Unable to resolve module expo-permissions from /Applications/ReactNative/myApp/App.js: expo-permissions could not be found within the project.

If you are sure the module exists, try these steps:
1. Clear watchman watches: watchman watch-del-all
2. Delete node_modules and run yarn install
3. Reset Metro's cache: yarn start --reset-cache
4. Remove the cache: rm -rf /tmp/metro-*
12 | import * as Notifications from "expo-notifications"; //アプリの通知
13 | import * as ScreenOrientation from "expo-screen-orientation"; //画面の縦横のロック
> 14 | import * as Permissions from "expo-permissions"; //push通知の許可

別のエラーが出ていますね。
「expo-permissions」がインストールされていないようなのでインストールします。

$ expo install expo-permissions
Installing 1 SDK 42.0.0 compatible native module using Yarn.
> yarn add expo-permissions@~12.1.1
spawn yarnpkg ENOENT
Error: spawn yarnpkg ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
at onErrorNT (internal/child_process.js:470:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)

うまくインスールできなかったので「–npm」をつけます。

$ expo install expo-permissions --npm

インストールできました。

$ expo build:android
・・・
Android Bundling complete

やっとできました!