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

Try*_*gve 17 java android gradle cordova

我正在尝试使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.我构建项目时仍然出错.

错误:

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

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

Mar*_*eck 18

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

首先,我想我也可以尝试使用与您相同的语法,以便尝试找出问题所在.据我所知,它失败了,因为build-extras.gradle文件没有神奇地合并到一起build.gradle,而是使用Gradle apply from方法加载和执行.由于这在android关闭之前发生,因此在过程中过早,并且这些android值会覆盖我们的"额外"值.

(我没有时间深入研究Gradle或Groovy,如果我的术语不精确,请道歉......)

但是,如果我使用这种postBuildExtras()方法,我可以让它工作.

如果查看build.gradleCordova生成的文件的底部,您会看到如果存在这样的方法(即postBuildExtras)ext,则会调用它.由于这是配置脚本中的最后一件事,我想这个方法的重点是我们可以用它来覆盖任何东西.

因此我最终得到了这个build-extras.gradle:

ext.postBuildExtras = {
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我实际上在调查中很早就开始工作,但是我一直在尝试其他方法,因为我怀疑当我们尝试使用多个build-extras.gradle文件时这种技术会失败- 考虑到我们都特别谈论Cordova插件,这很可能.

有一种看起来很有希望插件的技术,即使用<framework>元素plugin.xml,但是使用这种方法我永远无法获得特定于插件的模块来加载/导入/无论如何.当我进入#2插件时,我会再看看这个,但是现在上面描述的技术让我在今天早上的位置上有了一个很大的飞跃,所以再次感谢build-extras.gradle线索.;)


小智 6

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

<source-file src="src/android/lib/build-extras.gradle" target-dir="src/.." />
Run Code Online (Sandbox Code Playgroud)