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
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 .
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é.
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')
}
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.