web-dev-qa-db-fra.com

l'exécution a échoué pour la tâche ': app: compileDebugNdk' n'a pas pu exécuter cette commande ndk-build.cmd

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

com.Android.ide.common.internal.LoggedErrorException: Echec de l'exécution de la commande: C:\Program Files\ADT\sdk\Android-ndk\ndk-build.cmd NDK_PROJECT_PATH = null 

Error Code:
1

voici le résultat obtenu lorsque j'essaie d'exécuter un projet sur mon studio Android . Je suis sur Android studio 1.0 sdk build tools 24.0 mais avec une API ciblée

voici à quoi ressemble mon fichier 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)

voici à quoi ressemble mon fichier application.mk

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := Android-14
13
user3188402

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

signifie que le plugin Android gradle tente d’appeler ndk-build pour compiler vos sources. Vous devriez obtenir plus de détails que le code d'erreur dans votre fenêtre de journal.

Quoi qu’il en soit, il utilise actuellement un fichier Makefile généré automatiquement et ignore le vôtre, ce qui ne peut pas fonctionner car vous devez intégrer ffmpeg.

Pour résoudre ce problème, vous devez désactiver l'intégration automatique du ndk du plug-in et lui faire utiliser l'emplacement standard libs pour obtenir vos fichiers .so:

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

à partir de là, vous pouvez appeler vous-même ndk-build ou faire en sorte que Gradle l’appelle pour vous: 

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
}

Pour plus d'informations sur pourquoi tout cela, vous pouvez vérifier ceci Gist et mon blog post .

24
ph0b

Pour aider tous ceux qui ont fait une recherche à ce sujet, mais ne peuvent pas savoir où va la déclaration ci-dessus ......., elle est placée dans le fichier build.gradle situé dans le dossier {nom_projet}/app.

Plus précisément:

{YourApp} / app / build.gradle

Et pas le build.gradle à la racine du projet.

Placez-le dans la section "defaultConfig".

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

Espérons que ce petit conseil empêchera quelqu'un de passer trop de temps à essayer de trouver où et comment ce changement doit être effectué.

19
SpacemanScott

au-dessous du module: le code d'application fonctionne parfaitement .. ainsi vous pouvez vous référer à ceci ... ==>

  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')
}
0
Manthan Patel

J'ai rencontré ce problème aujourd'hui (3 ans après avoir posé la question) et j'ai remarqué que si les réponses @ ph0b et @SpacemanScott ne fonctionnaient pas, cela pourrait être dû au manque de prise en charge des versions 2.x.x dans les nouveaux téléphones. Essayez d'installer le dernier OpenCV alors.

0
Manaslu