Выполнение не выполнено для задачи ': app: compileDebugNdk' не удалось выполнить эту команду ndk-build.cmd
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
это результат, который я получаю при попытке запустить make в моем проекте на студии Android.
Я нахожусь в 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
Ответы
Ответ 1
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 и мой пост в блоге.
Ответ 2
Чтобы помочь любому, кто искал это, но не может понять, куда идет вышеуказанное утверждение...
Он помещается в 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
}
Надеюсь, этот небольшой совет не позволит кому-то потратить чрезмерное время, пытаясь выяснить, где и где это изменение должно быть сделано.
Ответ 3
ниже модуля: код приложения работает отлично..также вы можете ссылаться на это... == >
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')
}
Ответ 4
Я прошел эту проблему сегодня (через 3 года после публикации вопроса) и заметил, что если ответы @ph0b и @SpacemanScott не работают, это может быть из-за отсутствия поддержки 2.x.x в новейших телефонах. Попробуйте установить последнюю версию OpenCV.