错误:任务':app:compileDebugNdk'执行失败。
错误:您的项目包含C ++文件,但它没有使用受支持的本机构建系统。 考虑使用CMake或ndk-build集成稳定的Android Gradle插件:
答案 0 :(得分:39)
您似乎已经拥有C ++代码和项目目录中的Makefile,在这种情况下,您只需将Gradle链接到本机库:
从下拉菜单中选择 CMake 或 ndk-build ,具体取决于您的项目
一个。如果您选择 CMake ,请在项目中指定 CMakeLists.txt 脚本
湾如果您选择 ndk-build ,请指定 Android.mk 。
来源: 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,要么禁用它。
第一个选项的最佳方法是{strong> described Janman。
我不建议最近使用experimental plugin,因为我相信 ndk-build 集成功能更强大。但是使用实验性插件可以更容易地维护简单的项目。
或者,您可以出于某种原因选择在Android Studio之外构建本机库。为了防止出现错误消息,我知道三个选项。
您可以停用gradle任务:在 build.gradle 中,添加
sourceSets {
main {
jni.srcDirs = []
}
}
您可以从Android Studio hide the cpp files,例如
android.useDeprecatedNdk=true
此方法的缺点是Android Studio未对cpp文件编制索引。
另一个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)
在应用中获取build.gradle并搜索
sourceSets {
main {
jni.srcDirs = ['src/main/jni', 'src/main/jniLBS/']
}
}
并对此行添加注释。
答案 6 :(得分:0)
在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