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

时间:2018-08-03 17:10:19

标签: android gradle

我有一个通过以下三项配置的项目:

  • 在顶级 build.gradle 中声明存储库:

    buildscript { repositories { google() }}
    allprojects { repositories { google() }}
    
  • 声明类路径依赖性,因此可以从相应的存储库中的顶级 build.gradle

    中下载插件工件。
    buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.1.3' }}
    
  • 然后,在应用程序 build.gradle 文件中,应用插件:

    apply plugin: 'com.android.application'
    

我想迁移它以使用new plugins DSL启用的PluginsDependenciesSpec

然后我:

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

    pluginManagement { repositories { google() }}
    
  • 在应用程序 build.gradle 中声明了插件依赖性:

    plugins { id "com.android.application" version "3.1.3" }
    

但这无法解决:

  

失败:构建失败,并出现异常。

     
      
  • 其中:构建文件'... / build.gradle'行:2

  •   
  • 出了什么问题:在以下任何来源中均未找到插件[id:'com.android.application',版本:'3.1.3']:

  •   
  • Gradle Core插件(插件不在'org.gradle'名称空间中)

  •   
  • 插件存储库(无法解析插件工件'com.android.library:com.android.library.gradle.plugin:3.1.3')
  •   
     

在以下存储库中搜索:

     

我缺少让Gradle在这里连接点的什么地方,以便它可以将plugin.id连接到从适当的存储库获取的适当的JAR?

1 个答案:

答案 0 :(得分:0)

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')}")
            }
        }
    }
}

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

plugins {
    id 'com.android.application'
}

plugins {
    id 'com.android.library'
}

这是documentation