问题 无法在osx yosemite上从gradle在Android工作室上运行ndk-build


我想在MAC OSX Yosemite的Android Studio 1.0项目中从我的build.gradle运行ndk-build。

task ndkBuild(type: Exec) {
    commandLine 'ndk-build', '-C', file('src/main').absolutePath

}

我在local.properties文件中指定了ndk-dir,但是我收到了这个错误

A problem occurred starting process 'command 'ndk-build'

如果我从命令行运行gradle脚本,那么一切都成功构建

./gradlew :myproject:assembleDebug

因此,由于某种原因,IDE无法调用ndk-build。我启用了一些调试信息 安卓工作室和我有以下错误

Caused by: java.io.IOException: error=2, No such file or directory

因此IDE无法找到ndk-build exe,但是从IDE内部的终端运行可以找到ndk-build exe。

谢谢


905
2017-12-17 07:20


起源

好吧,我现在有一个解决方法,IDE无法找到ndk-build的路径所以我把完整的路径放在commandLine'fullpath / ndk-build'然后它的工作原理 - tech74
您是否将Android Studio设置为使用Gradle包装器? - Emanuelez


答案:


编辑

您现在可以像这样检索路径:

android.ndkDirectory.getAbsolutePath()

我更新了下面的示例。


正如你在评论中所说, commandLine 需要ndk-build程序的路径才能使其工作。这是一种在build.gradle中检索ndk路径的方法:

// call regular ndk-build script from app directory  
task ndkBuild(type: Exec) {
        def ndkDir = android.ndkDirectory.getAbsolutePath()

        commandLine ndkDir + "/ndk-build", '-C', file('src/main').absolutePath
    }

你将有一个“无法推断参数类型”的lint警告,你可以放心地忽略这个警告。加 // noinspection GroovyAssignabilityCheck 摆脱它。

这是用gradle 1.2.3测试的


14
2018-03-19 15:06



真棒,我正在寻找这个ndkDir技巧!但是,我不得不写 commandLine ndkDir+'/ndk-build.cmd' - PhilLab
获取ndkDirectory的正确方法是使用android.ndkDirectory - Cameron Lowell Palmer
一般来说,你不需要转换为absolutePath,相对就好了 - Alex Cohn
@PhilLab:那是因为你在Windows上。好的做法是在运行时检查: stackoverflow.com/a/27406803/192373 - Alex Cohn