错误:您的项目包含C ++文件,但它没有使用受支持的本机构建
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:您的项目包含C ++文件,但它没有使用受支持的本机构建相关的知识,希望对你有一定的参考价值。
错误:任务':app:compileDebugNdk'的执行失败。
错误:您的项目包含C ++文件,但它没有使用受支持的本机构建系统。考虑使用CMake或ndk-build与稳定的android Gradle插件集成:
您似乎已经拥有C ++代码和项目目录中的Makefile,在这种情况下,您只需将Gradle链接到本机库:
- 在项目窗格中,右键单击模块,然后选择“使用Gradle链接C ++项目”。
- 从下拉列表中选择CMake或ndk-build,具体取决于您的项目 一个。如果选择了CMake,请在项目中指定CMakeLists.txt脚本 湾如果您选择了ndk-build,请指定Android.mk。
资料来源:https://developer.android.com/studio/projects/add-native-code.html#existing-project
你可以在多个地方放置一个“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"
这些天Android插件显示了更好的解释。
* 什么地方出了错:
任务':app:compileDebugNdk'的执行失败。 >错误:您的项目包含C ++文件,但它没有使用受支持的本机构建系统。 考虑使用CMake或ndk-build集成。有关更多信息,请访问:http://d.android.com/r/studio-ui/add-native-code.html 或者,您可以使用实验插件:https://developer.android.com/studio/build/experimental-plugin.html。
基本上有两种选择:要么使用集成的externalNativeBuild,要么禁用它。
- 第一种选择的最佳方法是described,Janman。 我不建议最近使用experimental plugin,因为我相信ndk-build集成功能更强大。但是使用实验插件可以更容易地维护简单的项目。
- 或者,您可以出于某种原因选择在Android Studio之外构建本机库。为了防止错误消息,我知道三个选项。
您可以禁用gradle任务:在build.gradle中,添加
tasks.all task -> if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) task.enabled = false
您可以从Android Studio中获取hide the cpp files,例如sourceSets main jni.srcDirs = []
这种方法的缺点是Android Studio没有索引cpp文件。 另一个alternative是将android.useDeprecatedNdk=true
添加到gradle.properties。但是,目前尚不清楚这面旗帜的工作时间。
新解决方案将此添加到build.gradle(模块:app)
externalNativeBuild
cmake
version "3.12.0"
ndkBuild
path 'src/main/jni/Application.mk'
只需将android.useDeprecatedNdk=true
添加到gradle.properties文件即可。
我这样解决了这个问题。首先,不要在项目目录中创建任何空白区域。然后编辑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'
- 确保您已安装依赖项LLDB,CMake和NDK,如果没有,请从工具> Android> SDK Manager中选择SDK工具检查相应的框并应用。
- 在应用程序中获取build.gradle并搜索
sourceSets main jni.srcDirs = ['src/main/jni', 'src/main/jniLBS/']
并评论这一行。
- 在android studio 3.3.1中使用OpenCV项目。我面临同样的问题,通过在Tools-> SDK Manager - > Android SDK-> SDK Tools下安装CMake,LLDB和NDK找到解决方案。
- 将以下内容添加到build.gradle(模块:app)
externalNativeBuild cmake version "3.12.0" ndkBuild path 'build/intermediates/ndk/debug/Android.mk'
非常重要的是在build.gradle(Module:app)中删除此行。
sourceSets main jni.srcDirs = ['src / main / jni','src / main / jniLibs /']
你必须关心你在gradle(module.app)中的sourceSets并看看你的jni的lib文件夹名称是什么,例如,我的文件夹名称是jniLins所以我想从sourceSets中删除jni文件夹,但最好的方法是放置数组为空,以便它可以从exixting文件夹中读取我的意思而不是
sourceSets main jni.srcDirs = ['src/main/jni', 'src/main/jniLibs/']
写这个:
sourceSets main jni.srcDirs = []
以上是关于错误:您的项目包含C ++文件,但它没有使用受支持的本机构建的主要内容,如果未能解决你的问题,请参考以下文章
错误:任务“:app:compileDebugNdk”执行失败
“致命错误C1083:无法打开包含文件”但我已将目录添加到项目中
我们如何将CMake或ndk-build集成到Android Studio 3.0.1中? Gradle版本是4.1,android插件版本3.0.1