Ошибка: ваш проект содержит файлы С++, но он не использует встроенную встроенную сборку
Ошибка: не удалось выполнить задачу ': app: compileDebugNdk'.
Ошибка: Ваш проект содержит файлы C++, но он не использует поддерживаемую собственную систему сборки. Подумайте об использовании интеграции CMake или ndk-build со стабильным плагином Android Gradle:
Скриншот
Ответы
Ответ 1
Кажется, что у вас уже есть код на С++ и Makefile в каталоге проекта, и в этом случае вам просто нужно связать Gradle с родной библиотекой:
- В панели проектов щелкните правой кнопкой мыши на своем модуле и выберите Ссылка
Проект С++ с Gradle.
-
В раскрывающемся списке выберите CMake или ndk-build, в зависимости от вашего проекта
а. Если вы выбрали CMake, укажите CMakeLists.txt script в своем проекте
б. Если вы выбрали ndk-build, укажите Android.mk.
Источник: https://developer.android.com/studio/projects/add-native-code.html#existing-project
Ответ 2
Плагин Android в наши дни показывает лучшее объяснение.
* Что пошло не так:
Ошибка выполнения для задачи: app: compileDebugNdk '.
> Ошибка: ваш проект содержит файлы С++, но он не использует поддерживаемую встроенную систему сборки.
Рассмотрите возможность использования интеграции CMake или ndk-build. Для получения дополнительной информации перейдите по ссылке: http://d.android.com/r/studio-ui/add-native-code.html
Кроме того, вы можете использовать экспериментальный плагин: https://developer.android.com/studio/build/experimental-plugin.html.
Существует по существу два варианта: либо использовать встроенный внешнийNativeBuild, либо отключить его.
-
Наилучший подход для первого варианта был описанный Janman здесь.
Я бы не рекомендовал использовать экспериментальный плагин в наши дни, потому что я считаю, что интеграция ndk-build более могущественный. Но простые проекты могут быть проще поддерживать с помощью экспериментального плагина.
-
Кроме того, вы можете по какой-то причине выбрать собственные библиотеки вне Android Studio. Чтобы предотвратить сообщение об ошибке, я знаю три варианта.
Ответ 3
Новое решение добавьте это в свой build.gradle (Модуль: приложение)
externalNativeBuild {
cmake {
version "3.12.0"
}
ndkBuild {
path 'src/main/jni/Application.mk'
}
}
Ответ 4
Просто добавьте android.useDeprecatedNdk=true
в gradle.properties файл.
Ответ 5
Я решил эту проблему следующим образом. Прежде всего, не делайте никаких пробелов в каталоге проектов. Затем отредактируйте build.gradle(Module: app) и добавьте такие строки, как я.
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { jni.srcDirs = ['src/main/jni/','src/main/jniLibs/'] } }
externalNativeBuild {
ndkBuild {
path 'build/intermediates/ndk/debug/Android.mk'
}
}
Ответ 6
Недавно я столкнулся с той же проблемой, и я нашел сообщение в блоге. Может быть, эта ссылка Справка https://medium.com/@rdeep/android-opencv-integration-without-opencv-manager-c259ef14e73b
Ответ 7
- Убедитесь, что вы установили зависимости LLDB, CMake и NDK, если нет, выберите SDK TOOLS в Инструменты> Android> SDK Manager, установите соответствующие флажки и примените.
-
возьмите build.gradle в приложении и найдите
sourceSets {
main {
jni.srcDirs = ['src/main/jni', 'src/main/jniLBS/']
}
}
и прокомментируйте эту строку.
Ответ 8
- Работа над проектом OpenCV в андроид студии 3.3.1. Я столкнулся с той же проблемой и нашел решение, установив CMake, LLDB и NDK в Tools-> SDK Manager → Android SDK-> SDK Tools.
-
Добавьте следующее в build.gradle (Модуль: приложение)
externalNativeBuild {
cmake {
version "3.12.0"
}
ndkBuild {
path 'build/intermediates/ndk/debug/Android.mk'
}
}
}
Ответ 9
Очень важно удалить эту строку в build.gradle (Модуль: приложение).
sourceSets {main {jni.srcDirs = ['src/main/jni', 'src/main/jniLibs/']}}
Ответ 10
Вы должны заботиться о своих исходных наборах в gradle (module.app) и посмотреть, как называется ваша папка lib для вашего jni, например, мое имя папки было jniLins, поэтому я должен удалить папку jni из sourceSets, но лучший способ - это поместить массив пустой, чтобы он мог читать из папки exixting, я имею в виду вместо
sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jniLibs/'] } }
напишите это:
sourceSets { main { jni.srcDirs = [] } }
Ответ 11
Есть несколько мест, где вы можете поместить блок "externalNativeBuild", что означает разные вещи. Он должен находиться как в блоке android {}, так и в блоке android {defaultConfig {}}. Если внешний отсутствует, вы получите это. Рабочий пример отсюда: https://github.com/kennethreitz/super-sphere/blob/master/dist/android/love/build.gradle Блок "ndk" не нужен.
android {
defaultConfig {
externalNativeBuild {
ndkBuild {
arguments "-j2"
}
}
}
externalNativeBuild {
ndkBuild {
path "src/jni/Android.mk"
}
}
}