我正在编写一个自定义Gradle插件,该插件应该能够从Android插件访问配置参数。
我当然可以从groovy插件(这是我当前的代码)中做到这一点:
MyPlugin.groovy:
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.android.applicationVariants.all { variant ->
variant.registerJavaGeneratingTask( // all the right parameters
我的问题是我不希望插件位于Groovy中,而是希望使用Kotlin。
据我了解,我只需要在Kotlin中键入
project.android
无效,就需要编写类似于以下内容的内容:MyPlugin.kt
import com.android.build.gradle.AndroidBasePlugin
class MyPlugin : Plugin<Project> {
override fun apply(target: Project) {
val android = target.plugins.findPlugin(AndroidBasePlugin::class.java)
// and call android here
我的主要问题是导入
import com.android.
不存在。我尝试在build.gradle.kts上添加许多不同的依赖项,例如
implementation("com.android.tools.build:gradle:3.6.1")
示例,但是没有任何东西可以使我对其进行访问。问题:
案件:
(是)2.如何导入和使用它?
(否)2.什么是正确的方法?
tl; dr:
如何在Gradle Kotlin插件中编写
project.android.applicationVariants.all { variant ->
编辑:
@tim_yates的答案很完美。对谁感兴趣,这是最终代码。
build.gradle.kts:
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
jcenter()
google()
}
dependencies {
implementation("com.android.tools.build:gradle:3.6.1")
... my other dependencies
}
包名称/MyPlugin.kt:
import com.android.build.gradle.AppExtension
import com.android.build.gradle.api.ApplicationVariant
(...)
override fun apply(target: Project) {
val android = target.extensions.findByType(AppExtension::class.java)
android?.applicationVariants?.configureEach {
configureVariant(target, this)
}
private fun configureVariant(...) { // register my taks there
}
最佳答案
您需要的是这样的东西:
project.extensions.configure<AppExtension>("android") {
it.applicationVariants.all {
it.registerJavaGeneratingTask( // all the right parameters
}
}
正如您所说,您将需要
com.android.tools.build:gradle
依赖项。为什么不能被识别,我不确定...您在编写独立插件吗?如果是这样,那么您所拥有的就可以了...如果它是buildSrc文件夹中的嵌入式插件,那么您需要将lib添加到buildSrc构建中
关于android - 在用Kotlin编写的自定义插件中访问gradle Android插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60776207/