【问题标题】:Could not find method externalNativeBuild() for arguments找不到参数的方法 externalNativeBuild()
【发布时间】:2017-01-23 04:49:01
【问题描述】:

我正在尝试使用新的 android studio 2.2 将 ndkBuild 功能集成到现有的 android studio 项目中,以启用 c++ 调试等。 我已经尝试了 android studio 2.2 提供的 ndk 示例项目之一,它工作得非常好。但是,当我尝试在自己的项目中运行 gradle 命令时,我收到以下错误消息:

错误:(73, 0) 在 org.gradle.api.Project 类型的项目 ':core' 上找不到参数 [build_c6heui1f67l8o1c3ifgpntw6$_run_closure2$_closure9@4329c1c9] 的方法 externalNativeBuild()。

按照这个描述 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 NDK 位置

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

在我的安卓工作室。

还有什么我可能忘记的吗?

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

建议将不胜感激 =)

【问题讨论】:

  • 您是否将 externalNativeBuild 放在了 android{} 块内?
  • 是的,我做了,所以它不可能是错误源

标签: android-ndk java-native-interface build.gradle ndk-build android-studio-2.2


【解决方案1】:

我自己也遇到了这个错误。在您的根 build.gradle 中,确保将 gradle 设置为至少版本 2.2.0:

所以你应该在buildscript {...}中有以下内容

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

【讨论】:

  • gradle:3.2.1 怎么样?使用此版本仍然出现错误。
【解决方案2】:
android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_TOOLCHAIN=clang'
            }
        }
    }

【讨论】:

    【解决方案3】:

    Kun Ming Xies回答建议,我已将我的cmake 部分分成两部分以摆脱烦人的错误:

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

    defaultConfig 的第一部分包含配置(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'
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2017-03-22
      • 2018-05-24
      • 2021-11-08
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2017-10-18
      相关资源
      最近更新 更多