任务执行失败':app:compileDebugNdk'无法运行此命令ndk-build.cmd

时间:2014-12-12 22:26:24

标签: java android android-ndk makefile

Error:Execution failed for task ':app:compileDebugNdk'.
  

com.android.ide.common.internal.LoggedErrorException:无法运行命令:       C:\ Program Files \ ADT \ sdk \ android-ndk \ ndk-build.cmd NDK_PROJECT_PATH = null

Error Code:
1

这是我在android studio上运行make项目时获得的输出。 我在android studio 1.0上 sdk构建工具24.0但针对API 14

这是我的Android.mk文件的样子

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)

 LOCAL_MODULE    := Main
 LOCAL_SRC_FILES := Main.cpp
 LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
 LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil

 include $(BUILD_SHARED_LIBRARY)
 $(call import-module,ffmpeg/android/arm)

这是我的application.mk文件的样子

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-14

4 个答案:

答案 0 :(得分:24)

Error:Execution failed for task ':app:compileDebugNdk'.

意味着gradle android插件试图调用ndk-build本身来编译你的源代码。您应该获得比日志窗口中的错误代码更多的详细信息。

无论如何,目前它使用自动生成的Makefile执行此操作并忽略您的,因为您需要集成ffmpeg而无法工作。

要解决此问题,您应该禁用插件的自动ndk集成,并使其使用标准 libs 位置来获取.so文件:

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}

从那里你可以自己打电话给 ndk-build ,或者让gradle为你打电话:

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

// 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').absolutePath
    } else {
        commandLine 'ndk-build', '-C', file('src/main').absolutePath
    }
}

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

有关所有这些原因的详细信息,您可以查看此gist和我的blog post

答案 1 :(得分:20)

为了帮助任何搜索过此内容的人,但无法弄清楚上述陈述的去向... 它放在build.gradle中,位于{project_name} / app文件夹下。

具体做法是:

{YourApp} / app / build.gradle

而不是项目根目录下的build.gradle。

将其放在“defaultConfig”部分中。

defaultConfig {
    ....
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = [] //disable automatic ndk-build call
    }

希望这个小建议可以防止有人花费过多的时间来弄清楚需要做出哪些改变和改变。

答案 2 :(得分:0)

以下模块:应用程序代码完美运行..所以你可以参考这个...... ==>

  apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.mnthn.liking"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main {
            jni.srcDirs = ['src/main/jniLibs/']
            jni.srcDirs = []
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile project(':openCVLibrary331')
}

答案 3 :(得分:0)

我今天遇到了这个问题(发布问题后3年)并注意到如果@ ph0b和@SpacemanScott的答案不起作用,可能是由于最新手机缺乏2.x.x支持。然后尝试安装最新的OpenCV。