当前位置: 首页 > 知识库问答 >
问题:

在编译Kotlin代码之前从gradle运行CMake

张嘉
2023-03-14

使用Gradle5.4.1,我想为一个Android应用程序构建一个CMake项目。这可以在app/build.gradle中通过以下方式完成:

externalNativeBuild {
    cmake {
        // Provides a relative path to your CMake build script.
        version "3.13.0+"
        path "../subproject/CMakeLists.txt"
    }
}

本项目通过使用SWIG生成一个共享库和一些Java文件。我可以通过-djava_output_dir=generated/Java指定Java源的输出目录。

我如何迫使gradle在编译主应用程序源代码(Kotlin)之前等待CMake构建?源代码导入生成的Java文件,当前由于缺少Java文件,构建过程失败。gradle似乎是并行运行cmake和Kotlin编译器。

附加问题:如何将生成的源输出目录作为生成源添加到AndroidStudio项目树中?树中有一个用于生成源的特殊条目。

版本信息:

$ ./gradlew --version

------------------------------------------------------------
Gradle 5.4.1
------------------------------------------------------------

Build time:   2019-04-26 08:14:42 UTC
Revision:     261d171646b36a6a28d5a19a69676cd098a4c19d

Kotlin:       1.3.21
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          11.0.5 (Debian 11.0.5+10-post-Debian-1deb10u1)
OS:           Linux 4.19.0-6-amd64 amd64

共有1个答案

荆城
2023-03-14

您应该将cmake任务添加为CompileKotlin任务的依赖项。

分级任务是部分排序的(某些任务应该在某些其他任务之前启动)。依赖项被用来表示这种关系。

若要声明对ExternalNativeBuild的依赖项,请将其追加到Build.Gradle

project.afterEvaluate {
    if (tasks.findByName("externalNativeBuildDebug")) {
        compileDebugKotlin.dependsOn externalNativeBuildDebug
    }
    if (tasks.findByName("externalNativeBuildRelease")) {
        compileReleaseKotlin.dependsOn externalNativeBuildRelease  
    }
}

>

  • 什么是afterevalue?这是Gradle的生命周期阶段。这是阅读和应用所有定义的时候。在这里阅读更多内容。

    什么是ExternalNativeBuildDebugExternalNativeBuildRease?这些是对ExternalNativeBuild任务的引用,具体取决于特定的生成命令

  •  类似资料:
    • 我有一个通过JAXB完成从XSD到java代码生成的分级任务。但是代码生成需要一个手工的注释类(写在Kotlin上),放在项目的源目录中。在代码生成任务之前,我如何编译并放入类路径中一个这个文件? 在gradle项目中我有这样的台词: 所以在我作为param configurations.jaxb.aspath传递的代码生成任务中,我建议必须在这个类路径中包含已编译的类

    • 当我尝试安装一个app时,有两种可能: null 当APK文件存在于构建文件夹中时运行应用程序(工作非常好) 运行->运行应用程序(预期项目将生成,应用程序将安装,但显示上述错误!) 执行之后清理和运行应用程序的相同过程

    • 当我尝试安装一个应用程序时,有两种可能性: null 我试过的事情: 当构建文件夹中存在APK文件时运行应用程序(工作正常) 运行->运行应用程序(预计将构建项目并安装应用程序,但它显示了上面提到的错误!) 执行后清理和运行应用程序的过程相同

    • 我有一个非常简单的构建。gradle文件包含以下内容: 我想要的是在java编译开始之前运行generateSources任务。我找到了几种解决方法,比如compileJava。dependsOn(“generateSources”),但不幸的是,它们给出了一个错误: 我不认识Gradle,也不明白这个代码出了什么问题。所以我想知道如何修复这个错误。

    • 我使用jsonschema生成器基于我的POJO生成JSON模式文件。目前,我正在通过一个在<code>gradle构建</code>步骤中运行的测试来完成这项工作。这工作正常,但感觉不对,因为我所做的并不是测试任何东西。 我还找到了这个答案,其中详细说明了如何在上运行它,但这也不理想,因为它会在每次应用程序出现时毫无意义地执行它,但在我构建时不会。 因此,有没有一种方法可以告诉gradle(在中