我正在从一个较旧的Gradle版本移动一个项目,它在当前工作正常并且刚刚遇到一个又一个问题。大多数我用谷歌搜索,但刚刚在这一个墙上撞墙。
错误:(20,0)无法为com.android.build.gradle.internal.dsl.NdkOptions类型的对象获取未知属性'cppFlags'。
下面是ndk
的cppFlag.add部分我有一种感觉它与NDK或CMake或类似的东西有关但是我很难过,而不是一个Gradle家伙。 我没有发布应用程序gradle只是因为它相当大,但可以在需要时执行。
非常感谢对此有所帮助。 感谢
模块Gradle
apply plugin: 'com.android.library'
def basedir = projectDir.absolutePath
android {
compileSdkVersion=26
buildToolsVersion="27.0.3"
defaultConfig {
minSdkVersion 26
targetSdkVersion 26
versionCode 1
versionName "1.0"
ndk {
moduleName "biocore"
stl = "gnustl_shared"
cppFlags.add("-std=c++11")
cppFlags.add("-frtti")
cppFlags.add("-fexceptions")
cppFlags.add("-I${basedir}/src/main/headers".toString())
cppFlags.add("-iquote${basedir}/src/main/jni".toString())
ldLibs.addAll(["android","log","atomic","z"])
}
}
}
android.productFlavors {
create("armv7") {
ndk.abiFilters.add("armeabi-v7a")
String libsDir = "${basedir}/src/main/jniLibs/armeabi-v7a/"
ndk.ldLibs.addAll([
libsDir + "libopencv_legacy.a",
libsDir + "libopencv_calib3d.a",
libsDir + "libopencv_features2d.a",
libsDir + "libopencv_flann.a",
libsDir + "libopencv_imgproc.a",
libsDir + "libopencv_highgui.a",
libsDir + "libopencv_contrib.a",
libsDir + "libopencv_objdetect.a",
libsDir + "libopencv_core.a",
libsDir + "libtbb.a",
libsDir + "liblibtiff.a",
libsDir + "liblibpng.a",
libsDir + "liblibjpeg.a",
libsDir + "liblibjasper.a",
libsDir + "libIlmImf.a",
])
}
}
android.compileOptions.with {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
android.dependencies {
compile 'com.android.support:appcompat-v7:26.1.0'
}
Project Gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
maven { url "https://maven.google.com" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// classpath 'com.android.tools.build:gradle-experimental:0.11.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
google()
}
}
更新 根据迈克尔斯的建议(如果我理解正确的话),我修改如下;
ndk {
moduleName "biocore"
stl="gnustl_shared"
}
externalNativeBuild{
cmake {
cppFlags.add("-std=c++11")
cppFlags.add("-frtti")
cppFlags.add("-fexceptions")
cppFlags.add("-I${basedir}/src/main/headers".toString())
cppFlags.add("-iquote${basedir}/src/main/jni".toString())
ldLibs.addAll(["android", "log", "atomic", "z"])
}
}
}
}
现在我看到了类似的问题 - 未知属性'ldLibs' 我尝试将该行移动到ndk {block但得到相同的消息。 如果我将它注释掉(ldLids.addAll),那么它会在ndk.abiFilters的productFlavors块中出现同样的消息 - 未知属性
答案 0 :(得分:0)
在@Michael的帮助下,我把它排序了。
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
cppFlags "-fexceptions"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ndk {
abiFilters "armeabi-v7a"
}
}
debug {
ndk {
abiFilters "armeabi-v7a"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
答案 1 :(得分:0)
您开始使用 experimental gradle插件。这是为了在gradle中为C ++库提供构建设置。这个插件is facing end-of-life(请参阅链接了解详细的借口)。目前,Google提供了external native build tools,他们建议 cmake 而不是 ndkBuild 。
这意味着所有标志和配置都应该在 CMakeLists.txt 中处理,但very few parameters除外,它可以微调不同风格的构建或gradle配置。