使用 gradle 构建 Cordova 项目时覆盖 Java 版本

2022-09-03 01:19:08

我正在尝试使用gradle作为构建工具来构建Cordova项目。在Cordova项目中,我有自己的插件,需要Java 1.7。

在Cordova附带的build.gradle中,java版本是1.6。build.gradle:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }
}

build.gradle附带了一个很大的警告,说它是一个不应该编辑的生成文件,自定义gradle构建步骤的方法是 - 据我所知 - 创建一个build-extras.gradle文件。

我创建了一个build-extras.gradle文件,并尝试了以下操作:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

但它似乎没有奏效。我在生成项目时仍然收到错误。

错误:

> strings in switch are not supported in -source 1.6
>         switch (action) {
>                 ^   (use -source 7 or higher to enable strings in switch)

有人可以帮我弄清楚如何设置gradle来使这项工作吗?


答案 1

我一直在努力解决同样的问题,来到这里希望找到答案!无论如何,虽然没有答案,但您的提及使我走上了正确的轨道,以下内容现在对我有用......谢谢。build-extras.gradle

首先,我想我不妨尝试使用与您相同的语法,以便尝试找出问题所在。据我所知,它失败了,因为文件没有被神奇地合并到 中,而是使用Gradle方法加载和执行。由于这发生在闭包之前,因此该过程还为时过早,这些值会覆盖我们的“额外”值。build-extras.gradlebuild.gradleapply fromandroidandroid

(我没有时间深入研究Gradle或Groovy,所以如果我的术语不准确,我很抱歉......)

但是,如果我使用该方法,我可以让它工作。postBuildExtras()

如果你看一下 Cordova 生成的文件的底部,你会看到如果 存在这样的方法(即 ),那么它就会被调用。由于这是配置脚本中的最后一件事,那么我想这种方法的要点是我们可以使用它来覆盖任何内容。build.gradlepostBuildExtrasext

因此,我最终以此作为我的:build-extras.gradle

ext.postBuildExtras = {
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }
}

实际上,在我的调查中,我很早就开始这样做了,但一直在尝试其他方法,因为我怀疑当我们尝试拥有多个文件时,这种技术会失败 - 鉴于我们都在谈论Cordova插件,这很有可能。build-extras.gradle

有一种技术对于插件来说看起来很有前途,那就是在 中使用元素,但是使用这种方法,我永远无法让特定于插件的模块加载/导入/任何内容。当我到达插件#2时,我会再看一眼,但现在上面描述的技术让我在今天早上的位置上有了很大的飞跃,所以再次感谢你的线索。;)<framework>plugin.xmlbuild-extras.gradle


答案 2

关于Mark的答案,我得到了一个解决方案,可以将添加到文件中。因此,它将自动添加到平台文件夹中的正确位置。build-extras.gradleplugin.xml

<source-file src="src/android/lib/build-extras.gradle" target-dir="src/.." />

推荐