Android Studio失败构建NDK项目非零退出值

时间:2015-04-13 12:13:02

标签: android android-studio build android-ndk

我将从Eclipse Android SDK环境中处理的项目导入到新的Android Studio中。 试图运行项目我得到了这个

Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'ndk/ndk-build'' finished with non-zero exit value 2

首先,对我来说,看到这个错误很奇怪,因为之前在Eclipse Android SDK中工作,我自己运行了ndk-build,我仍然这样做。 Android Studio现在也在为我运行ndk-build吗?因为当我在终端中运行它时我没有任何问题,这里它告诉我不好的退出值。

然后我在互联网上搜索并找到了一个快速修复",即创建一个空的.c文件,因为你无法构建/运行没有.c文件的ndk项目。这并不奇怪,这对我不起作用,因为我们在.jni文件夹中有很多.c文件。

只是提到我在Yosemite的Macbook Pro上,该项目本身应该没问题。

提前感谢您的帮助。

7 个答案:

答案 0 :(得分:5)

这是Android Studio的已知问题,由启用NDK的项目提供的支持非常有限。回答你的问题:是的,Android Studio现在自己运行ndk-build,但是它会忽略现有的Android.mk并动态生成一个(并且对任何非平凡的启用NDK的项目都做错了)。实际上,解决此问题的最佳方法是禁用Android Studio的有限NDK支持并从gradle脚本调用ndk-build。 Here我已经更详细地描述了它,以及如何解决它。

答案 1 :(得分:2)

为简单起见,您可以尝试在build.gradle文件中插入sourceSets.main.jni.srcDirs = []android块。这将告诉gradle在不同的路径中查找您的C ++文件。

答案 2 :(得分:1)

您可以停用 compileDebugNdk ,但仍可在Android Studio中看到 jni 文件夹。在 build.gradle 中,添加以下子句:

tasks.all { task ->
    if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) {
        task.enabled = false
    }
}

答案 3 :(得分:1)

要知道确切的问题是什么,请执行以下操作:
1 - 确保您已正确设置ndk路径,例如在我的项目中,我将ndk.dir=/usr/local/opt/android-ndk-r13b放入local.properties文件中 2 - 转到Android应用的应用目录
3 - 运行此命令:<ndk_build_path> -C <jni_path> NDK_OUT=<jniLibDir> all NDK_DEBUG=1 例如:

/usr/local/opt/android-ndk-r13b/ndk-build -C /MYAPP/app/src/main/jni -j 4 NDK_OUT=../jniLibs all NDK_DEBUG=1

然后你可以看到出了什么问题。

答案 4 :(得分:1)

从windows导入项目到mac时遇到同样的错误,我尝试了上述所有解决方案,但没有用。最后注意到有多个目标模式&#34;这导致了这个错误。

解决方案:删除&#34; obj&#34; NDK中的文件夹并重建。

完成!!

答案 5 :(得分:0)

我遇到了同样的问题,尝试了很多事情,但是没有用,我发现:

commandline ndkBuildPath,'-j8','-C',file('src / main')。absolutePath

请尝试以下操作:

转到src / main / jni,打开终端并运行命令:/ home /.../ Android / Sdk / ndk-bundle / ndk-build

它将建立并显示更多日志。您会在代码中弄错什么。

答案 6 :(得分:-1)

我几乎尝试了所有可用的解决方案。我使用的是Windows 10,Android Studio 1.5.1,唯一有用的是这里的解决方案(http://answers.opencv.org/question/58551/androidstudiondk-finished-with-non-zero-exit-value2/

在Apps&gt; build.gradle中,在android对象下添加。

android{
...
sourceSets { 
 main { 
      res.srcDirs = ['src/main/res'] 
      jniLibs.srcDirs = ['src/main/jniLibs'] 
      jni.srcDirs = [] // This prevents the auto generation of Android.mk 
 } 
} 

在此版本的Android Studio中,在文件&gt;项目结构&gt; NDK路径中添加NDK路径会自动将其添加到local.properties文件,您不会编辑任何其他内容。