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なんかでもあるけど、アップデートでいきなり権限を書き換えるのはやめてほしいな〜。
以下の記事が参考になりました。 ありがとうございました。