いしのなかにいる

*いしのなかにいる*

oops ! I am in rock !

cordova run android コマンドで 「Error: spawn EACCES」が発生した時の解決方法

cordovaアプリを実機で試してみようと

$ cordova run android

を実行したら

$ cordova run android

ANDROID_HOME=/Users/user/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home
Subproject Path: CordovaLib
Error: spawn EACCES

なんてエラーが発生しました。

特に設定とかを変更したつもりはなかったのですが、、、

ググってもうまく改善できずしばらくハマったので、解決方法をメモっておきます。

原因: 権限不足

どうやら 「Error: spawn EACCES」と表示されるのは実行権限が問題のようです。

何も変更したつもりはないのですけどね。

解決方法

とりあえず何を実行しようとして怒られているのか調べてみましょう。

verboseを指定して出力内容を見ます。

$ cordova run android --verbose

~~~ 省略 ~~~
ANDROID_HOME=/Users/user/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home
Subproject Path: CordovaLib
Running command: /Users/user/project/cordova/platforms/android/gradlew cdvBuildDebug -b /Users/user/project/cordova/platforms/android/build.gradle -Dorg.gradle.daemon=true -Dorg.gradle.jvmargs=-Xmx2048m -Pandroid.useDeprecatedNdk=true
Error: spawn EACCES

どうやら「Running command: /Users/user/project/cordova/platforms/android/gradlew」というところでエラーになっているようですね。

EACCESは実行権限の問題なので gradlew に実行権限を与えます。

$ chmod +x /Users/user/project/cordova/platforms/android/gradlew

そして再実行してみます。

$ cordova run android --verbose


~~~ 省略 ~~~
ANDROID_HOME=/Users/user/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home
Subproject Path: CordovaLib
Running command: /Users/user/project/cordova/platforms/android/gradlew cdvBuildDebug -b /Users/user/project/cordova/platforms/android/build.gradle -Dorg.gradle.daemon=true -Dorg.gradle.jvmargs=-Xmx2048m -Pandroid.useDeprecatedNdk=true
↑↑↑
エラーになっていたコマンド

google-services plugin could not detect any version for com.google.android.gms or com.google.firebase, default version: 9.0.0 will be used.
please apply google-services plugin at the bottom of the build file.
~~~ 省略 ~~~
LAUNCH SUCCESS

無事にアプリが実機で起動できました。

まとめ

どうやら原因はAndroid Studioのアップデートをしたことのようです。

gradeの実行権限が変わっちゃったんですね。

iOSなんかでもあるけど、アップデートでいきなり権限を書き換えるのはやめてほしいな〜。

以下の記事が参考になりました。 ありがとうございました。

cordova buildでError: spawn EACCESが発生した時の対処方法(Qiita)