任务执行失败':app:ndkBuild'

问题描述:

我有关于NDK-Build的问题。这是失败的消息:任务执行失败':app:ndkBuild'

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

+0

你可以使用Android Studio中的内置[C++支持](https://developer.android.com/studio/projects/add-native-code.html),无需再定义自己的** ndkBuild **任务。 –

+0

我知道,但这不是我自己的想法。 –

+0

如果你不想触摸这些文件,请确保'C:\ Users \ Markus \ AppData \ Local \ Android \ Sdk \ ndk-bundle'位于路径 –

我认为你的问题是你没有指定工作用于Gradle任务的目录。尽管它正确设置了ndk.dir设置,但事实是commandLine将默认为没有'ndk-build.cmd'文件的项目目录。因此,只需添加下面一行到你的任务:

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

你可以阅读更多关于这一点,对于命令行等摇篮选项,在以下位置的摇篮文档中:

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

+0

谢谢你的回答,但我不知道在哪一行我需要添加你的线,请? –

+0

@MarkusJoos只需在以'if(Os.isFamily(Os.FAMILY_WINDOWS))' – Discoverer98

+0

'开始的行之前立即添加该行即可测试此操作,但它不能解决我的问题^^ –