使用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
您应该将cmake
任务添加为CompileKotlin
任务的依赖项。
分级任务是部分排序的(某些任务应该在某些其他任务之前启动)。依赖项被用来表示这种关系。
若要声明对ExternalNativeBuild
的依赖项,请将其追加到Build.Gradle
project.afterEvaluate {
if (tasks.findByName("externalNativeBuildDebug")) {
compileDebugKotlin.dependsOn externalNativeBuildDebug
}
if (tasks.findByName("externalNativeBuildRelease")) {
compileReleaseKotlin.dependsOn externalNativeBuildRelease
}
}
>
什么是afterevalue
?这是Gradle的生命周期阶段。这是阅读和应用所有定义的时候。在这里阅读更多内容。
什么是ExternalNativeBuildDebug
和ExternalNativeBuildRease
?这些是对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(在中