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

如何在Kotlin DSL中配置带有自定义源集扩展插件

董建德
2023-03-14

我可以用一只帮助之手将victor trellos简单源集扩展转换为Kotlin DSL,我似乎有点迷路了。

Victor Trello在SourceSet上有一个名为svg的扩展

    project.extensions.create('victor', VictorPluginExtension)
    // Add 'svg' as a source set extension
    project.android.sourceSets.all { sourceSet ->
        SourceDirectorySet sds = project.objects.sourceDirectorySet(sourceSet.name, "${sourceSet.name} svgs")
        sourceSet.extensions.add('svg', sds)
    }
// build.gradle:
android {
    // Variant 1 with individual setup
    sourceSets {
        main {
            svg.srcDir 'src/main/svg'
        }
    }
    // Variant 2 handling all at once
    sourceSets.all { sourceSet ->
        svg.srcDir "src/${sourceSet.name}/svg"
    }
}
// Plugin configuration of class com.trello.victor.VictorPluginExtension
victor {
    svgDpi = 72
    generateVectorDrawables = true
}

我注意到Victor插件扩展了SourceSet,Project.SourceSet的类型SourceSet(来自gradle)包含一个扩展,而AndroidSourceSet不包含.extensions。我还可以从AndroidSourceSet得到一个gradle SourceSet

这可能是进行插件配置的正确方法,尽管我无法在没有srcDir的情况下对其进行测试(如果错误,我将从问题中删除这一点,以免给以后的读者造成混淆)。

// build.gradle.kts:
configure<com.trello.victor.VictorPluginExtension> {
    svgDpi = 72
    generateVectorDrawables = true
}

共有1个答案

蒋健
2023-03-14

我在几个人的帮助下找到了解决方案(Google+Gradle论坛)。希望这能帮助其他人使用其他插件。

解决方案有三个部分要解决,

  1. 使用configure()配置插件
  2. 访问Groovy扩展
  3. 在kotlin中迭代sourcesets.all(如果您没有不幸地以sourcesets.all{sourceset->})开头,这是显而易见的)

这是来源

val Any.extensions get() = (this as org.gradle.api.plugins.ExtensionAware).extensions

android {
    sourceSets {
        // Variant 1 with individual setup
        named("main") {
            val a: com.android.build.api.dsl.AndroidSourceSet = this
            java.srcDir("src/sharedTest/java")
        }
    }
    // Variant 2 handling all at once
    sourceSets.all {
        val svgSourceSet = this.extensions["svg"] as SourceDirectorySet
        svgSourceSet.srcDir("src/${name}/svg")
    }
}
configure<com.trello.victor.VictorPluginExtension> {
    // Any assets defined in relative terms needs a base DPI specified
    svgDpi = 72
    // Do not generate these densities for SVG assets
    excludeDensities = listOf("ldpi", "xxxhdpi")
    // Set this to "true" if you want to generate Android vectors instead of PNGs
    generateVectorDrawables = false
}
 类似资料:
  • 所以,我正在为SAS编写一些代码,我意识到我必须将文件保存为filename.SAS。我的教授提到我将不得不使用笔记板或另一个文本编辑器在我的电脑。 我应该加上我的mac版本是10.5.8

  • 注意:TPR已经停止维护,kubernetes 1.7及以上版本请使用CRD。 自定义资源是对Kubernetes API的扩展,kubernetes中的每个资源都是一个API对象的集合,例如我们在YAML文件里定义的那些spec都是对kubernetes中的资源对象的定义,所有的自定义资源可以跟kubernetes中内建的资源一样使用kubectl操作。 自定义资源 Kubernetes1.6版

  • 目前 Mars 支持自定义 xlog 的加密部分和长短连协议加解包部分。需要强调的是想要自定义这些扩展,需要在本地编译 Mars 才可以,编译方法见 Mars Android 接入指南 和 Mars iOS/OS X 接入指南 中的编译部分。切记,在自定义实现时,可以增加函数,但是不能删除头文件中已有的函数,也不能修改头文件中的函数原型。 自定义 xlog 加密 xlog 的具体实现可以参考微信终

  • 当我们在开发某些东西时,经常会需要我们自己的 error 类来反映在我们的任务中可能出错的特定任务。对于网络操作中的 error,我们需要 HttpError,对于数据库操作中的 error,我们需要 DbError,对于搜索操作中的 error,我们需要 NotFoundError,等等。 我们自定义的 error 应该支持基本的 error 的属性,例如 message,name,并且最好还有

  • 我有一个使用Gradle和Kotlin DSL的Android应用程序。我正在添加Firebase性能监视,但我希望它只对特定的构建类型启用。 我一直遵循Firebase-禁用Firebase性能监视中提供的说明。不幸的是,提供的代码片段是Groovy。 我已尝试通过执行以下操作,在我的应用程序级Gradle脚本中获取对Firebase性能监控扩展的引用: Android Studio没有发现任何

  • 你可以通过 nuxt.config.js 文件中的 extend 配置项来扩展 Webpack 的配置: module.exports = { build: { extend (config, { isDev, isClient }) { // ... } } }