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

如何使用新的插件DSL应用com.android.application插件?

萧远
2023-03-14
buildscript { repositories { google() }}
allprojects { repositories { google() }}
buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.1.3' }}
apply plugin: 'com.android.application'

我希望将其迁移到使用pluginsdependenciesspec启用的新插件DSL。

于是我:

>

  • 在settings.gradle中声明了存储库:

    pluginManagement { repositories { google() }}
    
    plugins { id "com.android.application" version "3.1.3" }
    
    • 谷歌
    • bintrayjcenter
    • Maven(https://maven.fabric.io/public)
    • Gradle中央插件库

    要让Gradle连接这里的点,以便将plugin.id连接到从适当的存储库中获取的适当的JAR中,我缺少了什么?

  • 共有1个答案

    拓拔俊德
    2023-03-14

    PluginManagement中,您可以使用ResolutionStrategy并强制使用Google()存储库中的特定工件。

    pluginManagement {
        repositories {
            google()
        }
    
        resolutionStrategy {
            eachPlugin {
                if (requested.id.id in ['com.android.application', 'com.android.library']) {
                    useModule("com.android.tools.build:gradle:${getProperty('version.plugin.android')}")
                }
            }
        }
    }
    

    然后,您可以使用新的插件DSL应用android插件:

    plugins {
        id 'com.android.application'
    }
    

    plugins {
        id 'com.android.library'
    }
    
     类似资料:
    • 想项目中添加插件的新方法不仅仅是一种更为方便的语法.新的DSL语法处理与老方法有很大的不同.新的机制允许Gradle更早更快的确定插件.这允许做更智能的事,如: 优化插件类的加载和重用. 允许不同的插件使用不同版本的依赖关系. 为编辑构建脚本提供关于隐含属性和值的详细信息 这要求插件被指定使Gradle在执行之前剩下的构建脚本前可以很容易并且很快的提取它.还要求插件使用一些静态的定义。 新的插件机

    • 插件DSL正在孵化(incubating)中,请注意,在以后的Gradle版本中,DSL和其它配置可能会改变. 新的插件DSL提供了更为简洁,方便的方式来声明插件的依赖关系。它的适用于与新的Gradle Plugin Portal,同时提供了方便的核心和社区插件.该插件脚本块配置PluginDependenciesSpec的实例. 要应用的核心插件,可以使用短名称: Example 21.5. A

    • 新插件{}块不支持任意Groovy代码.被限制的原因是为幂等(每次产生相同的结果)和无副作用(为了Gradle随时执行的安全). 形式是: plugins{ id «plugin id» version «plugin version» } «plugin id»和«plugin version»必须是常量,字面量,字符串.其他语句都是不允许的;他们的存在会导致编译错误. 插件{}块也必

    • E:/home/example/documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/helloplugin.kt:(11,27):以下任何函数都不能用提供的参数调用: public抽象fun register(P0:String,p1:Class,vararg p2:any!):在org.gradle.api.

    • 还有中的块控制新的插件方法,我尝试定义块并添加,但它不起作用。 简而言之,使用DSL添加的插件是如何工作的,哪个块告诉从哪里找到插件,然后哪一行告诉在类路径中添加它。 更新:对于ex,repositories中的maven块-buildscript部分告诉您在位置和依赖项中的classpath标签下查看插件-buildscript告诉您将此依赖项添加到应用程序类路径中 更正:

    • 如https://cloud . Google . com/app engine/docs/standard/Java/tools/Gradle-reference上所述,AppEngine Gradle插件提供如下配置: 使用 时,这样的配置应该是什么样子? 我正在查看AppEngine任务,但不明白如何将其连接到适当的Kotlin DSL设置。 编辑 当简单地将上述块添加到<code>buil

    • 我不知道如何在带有kotlin DSL的gradle构建中使用shadow插件。所有文档都使用groovy dsl。 这是build.gradle.kts的内容: 这是的内容 但是当我尝试进行 时,我收到此错误: 我认为这很奇怪,因为我已经在参数中输入了应用程序主类。 我试着加上这个: 但是当我尝试使用此选项构建时,它抱怨它找不到类型。 我到底做错了什么?

    • 目前不能使用一次添加一个插件到多个项目中的模式,如使用subprojects{}等方式.目前没有机制可以应用一次插件到多个项目.目前,每个项目都必须在自己的构建脚本中的plugins{}块中声明应用的插件. Gradle的未来版本将删除此限制. 如果新语法的限制让人望而却步,推荐使用buildscript{} block.