错误:您的项目包含C ++文件,但它没有使用受支持的本机构建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:您的项目包含C ++文件,但它没有使用受支持的本机构建相关的知识,希望对你有一定的参考价值。

错误:任务':app:compileDebugNdk'的执行失败。

错误:您的项目包含C ++文件,但它没有使用受支持的本机构建系统。考虑使用CMake或ndk-build与稳定的android Gradle插件集成:

Screenshot

答案

您似乎已经拥有C ++代码和项目目录中的Makefile,在这种情况下,您只需将Gradle链接到本​​机库:

  1. 在项目窗格中,右键单击模块,然后选择“使用Gradle链接C ++项目”。
  2. 从下拉列表中选择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,要么禁用它。

  1. 第一种选择的最佳方法是describedJanman。 我不建议最近使用experimental plugin,因为我相信ndk-build集成功能更强大。但是使用实验插件可以更容易地维护简单的项目。
  2. 或者,您可以出于某种原因选择在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'
    

另一答案
  1. 确保您已安装依赖项LLDB,CMake和NDK,如果没有,请从工具> Android> SDK Manager中选择SDK工具检查相应的框并应用。
  2. 在应用程序中获取build.gradle并搜索 sourceSets main jni.srcDirs = ['src/main/jni', 'src/main/jniLBS/'] 并评论这一行。
另一答案
  1. 在android studio 3.3.1中使用OpenCV项目。我面临同样的问题,通过在Tools-> SDK Manager - > Android SDK-> SDK Tools下安装CMake,LLDB和NDK找到解决方案。
  2. 将以下内容添加到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”执行失败

au为啥加载音频错误

包含不受支持的权利值

“致命错误C1083:无法打开包含文件”但我已将目录添加到项目中

我们如何将CMake或ndk-build集成到Android Studio 3.0.1中? Gradle版本是4.1,android插件版本3.0.1

为啥链接器链接了错误的函数?