【问题标题】:Gradle sync fails with cmake "cause: executing external native build for cmake"Gradle 同步因 cmake 失败“原因:为 cmake 执行外部本机构建”
【发布时间】:2019-12-05 06:54:25
【问题描述】:

我正在尝试在 Android Studio 中构建我同事的项目,这需要 CMake SDK 来构建项目中包含的外部 c/cpp 文件。我遇到的问题是,尽管通过 SDK 管理器安装了 LLDB、NDK 和 CMake SDK 工具,但引用 cmake 路径的模块的 gradle 无法同步。我的同事已经安装并运行了这个项目并没有遇到这个问题,所以我怀疑它一定是我的环境设置中的问题。

到目前为止,我已经尝试卸载并重新安装 CMake SDK,刷新链接的 C++ 项目,并从 gradle 文件中删除对 cmake 路径的引用,并通过右键单击模块 -> Link C++ Project with Gradle 添加引用,但这些都不起作用。

当我在 gradle 中注释掉对我的 CMakeLists.txt 的引用时,它会同步,这表明问题与对 CMake 文件的引用有关。我还尝试在我的 CMakeLists.txt 文件中注释掉库引用,以查看是否由于文件中的引用而发生错误,但即使我注释掉所有内容,gradle 也无法同步。

这就是我的 gradle 文件的样子。

externalNativeBuild {
    cmake {
        path 'src/main/cpp/CMakeLists.txt'
    }
}

当我在 build.gradle 中按同步(重试)时,错误消息只是显示

SIMPLE: Error configuring

当我忽略 gradle 同步失败的事实并尝试构建时,错误消息显示如下。

Cause: executing external native build for cmake <my_project_path>\src\main\cpp\CMakeLists.txt

编辑:添加了指向我的 Android Studio NDK 路径的图像捕获的链接(C:\Users\username\AppData\Local\Android\Sdk\ndk-bundle for Windows)。 NDK path Capture

【问题讨论】:

  • 在android studio中ndk路径设置正确吗?
  • 尝试给路径类似:externalNativeBuild { cmake { path "CMakeLists.txt" } }
  • @AshokKumar 我的 Android SDK 位置是 C:\Users\\AppData\Local\Android\sdk。我还检查了该路径中是否有 ndk 文件夹。我还尝试了您将路径更改为“CMakeLists.txt”的建议,但由于“该文件不存在”而失败。
  • @e.cho 你找到解决办法了吗?
  • @HadiAhmadi 看起来其中一种 SDK 工具(LLDB、NDK 和 CMake)不向后兼容。在比较并还原每个 SDK 的版本以匹配我同事的版本后,我能够让错误消失。

标签: android android-studio gradle cmake android-gradle-plugin


【解决方案1】:

简而言之 - 问题可能出在与项目一起导入的 build.gradle 文件中。

尝试编辑“build.gradle”第 9 行:类路径“com.android.tools.build:gradle:3.1.1” 替换 gradle 版本号(在我的例子中,我将 '3.1.1' 替换为 '3.5.0')。

更详细 - 我从以下位置克隆时遇到了同样的问题: https://github.com/farzaa/DracoPortedToAndroid

我确实尝试了上述方法(设置 ndk 路径),但这不是问题,因为 ndk 库的路径是正确的。所以剩下的最可能的错误原因是一些与克隆项目一起导入的项目设置。

尝试将导入项目的“Gradle Scripts”(在项目资源管理器中)与 Android Studio 环境中构建的新项目进行比较。新项目将具有正确的本地设置。

在我的情况下,我替换了:

classpath 'com.android.tools.build:gradle:3.1.1'

与:

classpath 'com.android.tools.build:gradle:3.5.0'

【讨论】:

  • 这对我有用,谢谢。我正在使用classpath 'com.android.tools.build:gradle:3.1.4'
【解决方案2】:

在 android studio 中设置 NDK 路径: 文件 -> 项目结构 -> sdk 位置 -> android ndk 位置 -> 设置路径,例如我在 mac 上的 ndk 位置是 /Users/username/Library/Android/sdk/ndk-bundle

【讨论】:

    【解决方案3】:

    这可能是因为项目中有一个共享库需要与 STL 的共享版本链接。尝试将以下内容添加到您的 build.gradle

    android {
        defaultConfig {
            externalNativeBuild {
                cmake {
                    arguments "-DANDROID_STL=c++_shared"
                }
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      我收到了同样的错误信息,结果发现我的 CMakeLists.txt 中有语法错误

      【讨论】:

        【解决方案5】:

        我通过在 app/build.gradle 文件中添加“abiFilters”解决了这个问题:

        defaultConfig {
                externalNativeBuild {
                    cmake {
                        abiFilters 'armeabi-v7a','arm64-v8a'
                    }
                }
        }
        

        【讨论】:

          猜你喜欢
          • 2017-12-06
          • 2018-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多