Cordova安卓构建立即失败 [错误:spawn EACCES]

20

我刚开始使用 Cordova(PhoneGap)并尝试用它构建我的第一个项目,但是在编译步骤中遇到了问题——当我尝试构建时(为了追踪问题,我将“build”步骤分解为“prepare”和“compile”,前者就我所知道的工作正常),我看到了这个:

~/Projects/MyProject$ cordova compile android
Compiling app on platform "android" via command "/media/glenatron/local disk/Projects/Cordova/MyProject/platforms/android/cordova/build" 
{ [Error: spawn EACCES] code: 'EACCES', errno: 'EACCES', syscall: 'spawn' }

据我所了解,这似乎是一个权限问题,但由于我没有Node或Cordova的经验,我不知道如何排除故障。看起来它正在尝试启动另一个进程 - 可能是Android SDK?- 但是失败了。

有没有办法让Node或Cordova告诉我更多信息,或者是否有日志文件可以帮助我追踪问题所在?

编辑:我意识到cordova有一个--verbose开关,当我激活它时,我会得到上面的输出,并附加几行...

Error: spawn EACCES
    at errnoException (child_process.js:980:11)
    at Process.ChildProcess._handle.onexit (child_process.js:771:34)

不幸的是,它们似乎并没有提供更多信息,比如无法启动 哪个 进程。

6个回答

34
对我来说,这个方法解决了问题: chmod 777 /Applications/Android\ Studio.app/Contents/gradle/gradle-2.2.1/bin/gradle

2
确实,这也解决了我的问题,但是你在“Android Studio”内部有一个空格,所以命令应该是 chmod 777 "/Applications/Android Studio.app/Contents/gradle/gradle-2.2.1/bin/gradle" - Hirbod
8
谢谢!这个对我有用。chmod 777 /Applications/Android\ Studio.app/Contents/gradle/gradle-4.1/bin/gradle - ethanneff
感谢为Gradle设置权限,解决了问题。只有一个小建议,请检查Gradle文件夹,因为版本在您的情况下可能会有所不同。 - Jakki

26

这是一个权限问题,只需执行:

chmod 777 "/media/glenatron/localdisk/Projects/Cordova/MyProject/platforms/android/cordova/build"

那应该可以解决问题了。


3
很烦人的是,这其实是因为我把文件存储在一个NTFS分区中,这个分区是我在Linux和Windows之间共享的。这意味着Linux实际上无法对权限进行任何操作。必须将它移动到我的启动分区,现在它可以正常工作了。真希望在设置系统之前我完全意识到Windows 8有多糟糕... - glenatron
6
chmod +x platforms/android/cordova/build翻译成中文为:赋予platforms/android/cordova/build执行权限。 - Avinash Meetoo
2
现在,在钩子目录内执行钩子时出现了相同的错误。要修复它,请将失败的文件的chmod设置为755。请参见我在另一个问题中的答案这里 - bernardn

13

像Solidak建议的那样使用verbose工作。

cordova build --release --verbose android

最后一个命令是访问/platforms/android/gradlew,所以我用chmod +x修改了那个文件,然后它就工作了。


6

我想对于每个人来说可能不同。使用--verbose命令会显示Cordova需要访问的文件,您可以通过此找到要执行chmod 777 <file>的文件。查找无法访问的文件需要运行以下这条命令:cordova build --release --verbose android


4
使用“+x”代替“777”是足够的。 - kim3er

0

对于MAC用户,请将“Android Studio”更改为AndroidStudio。我的cordova构建在Android Studio的名称中带有反斜杠(),所以我更改了应用程序的名称。这对我有效。


0

我曾经遇到过同样的问题。在我的情况下,我将示例 Cordova 项目放在了一个不同于主目录的 ext3 分区上。由于该分区不是 NTFS 格式,权限不应该成为问题。但是当我尝试了所有建议的方法(更改权限、使所有内容可执行)后,它们都没有起作用。这个问题在我将示例 Cordova 文件夹创建在我的主目录分区后就消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接