找不到externalNativeBuild()方法的解决方法

13

我正在尝试将ndkBuild功能集成到一个现有的Android Studio项目中,使用新的Android Studio 2.2版本,以启用C++调试等功能。我已经尝试了Android Studio 2.2提供的一个NDK示例项目,它可以完美地工作。然而,当我尝试在自己的项目中运行Gradle命令时,会出现以下错误信息:

Error:(73, 0) Could not find method externalNativeBuild() for arguments [build_c6heui1f67l8o1c3ifgpntw6$_run_closure2$_closure9@4329c1c9] on project ':core' of type org.gradle.api.Project.

根据这个描述http://tools.android.com/tech-docs/external-c-builds,我得到了一个包含以下命令的Gradle脚本。

externalNativeBuild{
    ndkBuild{
        path "$projectDir/jni/Android.mk"
    }
}

externalNativeBuild {
    ndkBuild {
      arguments "NDK_APPLICATION_MK:=$projectDir/jni/Application.mk"
      abiFilters "armeabi-v7a", "armeabi","arm64-v8a","x86"
      cppFlags "-frtti -fexceptions"
    }
}

在项目设置方面是否可能我有什么遗漏?

我已经在我的Android Studio下正确设置了Android NDK位置,具体操作如下:

文件 -> 项目结构 ... -> SDK位置 -> Android NDK位置

还有其他任何我可能忘记的地方吗?

有没有人遇到类似的问题?

谢谢大家提供建议 =)


1
你把 externalNativeBuild 放在 android{} 块里了吗? - tianwei
是的,我做了,所以它不可能是错误源。 - MinionDeveloper
3个回答

15

我也遇到了这个错误。在你的根 build.gradle 文件中,请确保 gradle 至少设置为 2.2.0 版本:

所以你应该在 buildscript {...} 中包含以下内容。

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
}

4
gradle:3.2.1 怎么样?使用这个版本还是会出现错误。 - l33t

2

根据昆明谢的回答,我将我的cmake部分分成两个部分,以摆脱令人烦恼的错误:

在类型为com.android.build.gradle.internal.dsl.CmakeOptions的对象上找不到方法arguments()的参数[-DREVISION=1.3.1]。

第一个部分包含配置(用于CMake和C++标志的命令行参数),第二个部分包含CMakeLists.txt的路径:

def revision = "1.3.1"
android {
  compileSdkVersion 25
  buildToolsVersion "25.0.2"

  defaultConfig {
    versionCode = ...
    versionName "${revision}"
    externalNativeBuild {
      cmake {
        arguments "-DREVISION=${revision}"
        cppFlags '-fexceptions', '-frtti', '-std=c++11'
      }
    }
  }

  buildTypes { }

  lintOptions { }

  externalNativeBuild {
    cmake {
      path 'CMakeLists.txt'
    }
  }
}

1
android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_TOOLCHAIN=clang'
            }
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接