【问题标题】:Execution failed for task ':app:ndkBuild'任务“:app:ndkBuild”执行失败
【发布时间】:2018-02-18 10:35:23
【问题描述】:

我有关于 NDK-Build 的问题。那是失败信息:

Error:Execution failed for task ':app:ndkBuild'.
> A problem occurred starting process 'command 'ndk-build.cmd''

我已经测试了一些修复程序,但它不起作用。我不知道我还能做什么。我希望你能帮助解决我的问题:

这里是 build.gradle:

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

android {
     compileSdkVersion 14
     buildToolsVersion "25.0.2"

defaultConfig {
    applicationId "teaonly.droideye"
    targetSdkVersion 14

    ndk {
        moduleName "MediaEncoder"
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

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

//Call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec) {
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine 'ndk-build.cmd', '-C', file('src/main/jniLibs').absolutePath
    } else {
        commandLine 'ndk-build', '-C', file('src/main/jniLibs').absolutePath
    }
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

}

dependencies {
    compile files('libs/java_websocket.jar')
}

这是我的 local.properties:

ndk.dir=C\:\\Users\\Markus\\AppData\\Local\\Android\\Sdk\\ndk-bundle
sdk.dir=C\:\\Users\\Markus\\AppData\\Local\\Android\\Sdk

这是我的项目:

Project Path

【问题讨论】:

  • 您可以使用Android Studio内置的C++ support,不再需要定义自己的ndkBuild任务。
  • 我知道,但这不是我自己的项目。
  • 如果您不想接触文件,请确保 C:\Users\Markus\AppData\Local\Android\Sdk\ndk-bundle 在 PATH 上
  • 我在路径上查了一下,找到了ndk-build.cmd
  • 尝试运行gradlew assembleRelease --debug(或--stacktrace),看看能否获得有关错误的更详细信息。

标签: android android-studio android-ndk build.gradle


【解决方案1】:

我认为您的问题是您没有为 Gradle 任务指定工作目录。即使正确设置了 ndk.dir 设置,事实上 commandLine 将默认为项目目录,其中没有“ndk-build.cmd”文件。因此,只需将以下行添加到您的任务中:

workingDir '/Users/Markus/AppData/Local/Android/Sdk/ndk-bundle'

您可以在 Gradle 文档中的以下位置阅读有关此选项以及命令行的其他 Gradle 选项的更多信息:

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html

【讨论】:

  • 谢谢您的回答,但我不知道我需要在哪一行添加您的行?
  • @MarkusJoos 只需在以if (Os.isFamily(Os.FAMILY_WINDOWS))开头的行之前添加一行即可
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2016-05-02
相关资源
最近更新 更多