首页 > 解决方案 > 任务 generateJsonModelArmDebug 执行失败

问题描述

我尝试使用 Android Studio 使用 cmake 3.14.0 版本构建原生 c++ 项目。就像在文档中一样:https ://developer.android.com/studio/projects/add-native-code#use_a_custom_cmake_version 。所以我添加version "3.14.0"到我的 build.gradle 并添加cmake.dir=C\:\\CMakeWin32到我的 local.properties 关于香草 cmake。进而:

> Task :UnitTests:generateJsonModelArmDebug
> Task :UnitTests:generateJsonModelArmDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':UnitTests:generateJsonModelArmDebug'.
> Illegal char <:> at index 47: C:/j/client/dava.framework/Programs/UnitTests\C:/r15c/sources/android/cpufeatures/cpu-features.c

如果我在 NDK 捆绑包中使用默认的 cmake 3.6 一切正常。我的环境是:
Windows - 10
Android Studio - 3.4.1
gradle - 尝试 4.10.1 和 5.4.1
ndk - 尝试 15c 和 19c

在我的 CMakeLists.txt 中,我添加了依赖项:

    add_library( ${PROJECT_NAME} SHARED ${PLATFORM_ADDED_SRC} ${REMAINING_LIST} )
    include(AndroidNdkModules)
    android_ndk_import_module_cpufeatures()
    target_link_libraries( ${PROJECT_NAME} cpufeatures)

我从错误消息 full path to C:/r15c/sources/android/cpufeatures/cpu-features.cgradle want's to concatenate to path to current project中了解到C:/j/client/dava.framework/Programs/UnitTests。我认为 gradle 的问题以及它如何使用 cmake_server 生成 json 代码模型。但是如何解决呢?提前致谢。

更新(更多信息):

  1. 如果我像这样构建:C:\j\client\dava.framework\Programs\UnitTests\Platforms\Android>gradlew :UnitTests:generateJsonModelArmDebug --info > log.txt 2>&1
  2. 在日志文件中从 cmake 服务器复制响应并将其保存在文件 test.json 中
  3. 在 Firefox 中打开 test.json 并查看目标 libcpufeatures.asource部分中包含一个源文件的完整路径。
  4. sourceDirectory来自父项目的遗骸C:/j/client/dava.framework/Programs/UnitTests
  5. 所以我认为 gradle 尝试将这两个错误结合在 cmake 中或在 gradle 中使用来自 cmake 的 json 响应。 来自 cmake-server 的响应的 json 视图

标签: androidgradlecmake

解决方案


错误在谷歌 gradle 插件中,所以我只是升级它,它适用于新的 cmake 3.14。只需更新您的 gradle 插件:

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

推荐阅读