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

时间:2017-01-22 13:24:00

标签: android-studio

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

  

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

Screenshot

11 个答案:

答案 0 :(得分:39)

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

  1. 在项目窗格中,在模块上右键单击,然后选择链接 带Gradle的C ++项目
  2. 下拉菜单中选择 CMake ndk-build ,具体取决于您的项目

    一个。如果您选择 CMake ,请在项目中指定 CMakeLists.txt 脚本

    湾如果您选择 ndk-build ,请指定 Android.mk

  3. 来源: https://developer.android.com/studio/projects/add-native-code.html#existing-project

答案 1 :(得分:13)

这些天的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. 第一个选项的最佳方法是{strong> described Janman

    我不建议最近使用experimental plugin,因为我相信 ndk-build 集成功能更强大。但是使用实验性插件可以更容易地维护简单的项目。

  2. 或者,您可以出于某种原因选择在Android Studio之外构建本机库。为了防止出现错误消息,我知道三个选项。

    1. 您可以停用gradle任务:在 build.gradle 中,添加

      sourceSets {
        main {
          jni.srcDirs = []
        }
      }
      
    2. 您可以从Android Studio hide the cpp files,例如

      android.useDeprecatedNdk=true

      此方法的缺点是Android Studio未对cpp文件编制索引。

    3. 另一个alternative是将{{1}}添加到 gradle.properties 。但是,目前尚不清楚这面旗帜的运作时间。

答案 2 :(得分:4)

新解决方案将其添加到您的build.gradle(Module:app)

externalNativeBuild {
    cmake {
        version "3.12.0"
    }
    ndkBuild {
        path 'src/main/jni/Application.mk'
    }
}

答案 3 :(得分:2)

只需将checkbox: false添加到gradle.properties文件即可。

答案 4 :(得分:0)

我这样解决了这个问题。 首先,不要在项目目录中留下任何空白。 然后编辑 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'
    }
}

答案 5 :(得分:0)

  1. 确保已安装依赖项LLDB,CMake和NDK 如果不是,请从工具> Android> SDK管理器中选择SDK工具,然后检查 相应的框并应用。
  2. 在应用中获取build.gradle并搜索

    sourceSets { 
        main { 
            jni.srcDirs = ['src/main/jni', 'src/main/jniLBS/'] 
        } 
    }
    

    并对此行添加注释。

答案 6 :(得分:0)

  1. 在Android Studio 3.3.1中处理OpenCV项目。我遇到同样的问题,并通过在工具-> SDK管理器-> Android SDK-> SDK工具下安装CMake,LLDB和NDK找到解决方案。
  2. 在build.gradle(Module:app)中添加以下内容

    externalNativeBuild {
            cmake {
                        version "3.12.0"
            }
            ndkBuild {
                        path 'build/intermediates/ndk/debug/Android.mk'
            }
       }
    }
    

答案 7 :(得分:0)

非常重要的是删除build.gradle(Module:app)中的这一行。

sourceSets {main {jni.srcDirs = ['src / main / jni','src / main / jniLibs /']}}

答案 8 :(得分:0)

您必须关心gradle(module.app)中的sourceSets,并查看jni的lib文件夹名称是什么 例如,我的文件夹名称是jniLins,因此我不得不从sourceSets中删除jni文件夹,但是最好的方法是将数组放空,以便它可以从exixting文件夹中读取 我的意思不是

sourceSets { main { jni.srcDirs = [] } }

这样写:

groupType

答案 9 :(得分:0)

您可以在多个地方放置“ 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"
        }
    }
}

答案 10 :(得分:0)

不是最佳解决方案,但快速的方法是通过添加以下行,在gradle.properties中将“ NDK弃用”设置为60天:

android.deprecatedNdkCompileLease=1608114817403