Android Studio 版本
Android Studio Bumblebee | 2021.1.1 Canary 8
好久没有使用AndroidStudio创建新工程了(虽然我使用的预览版)。最近要做个项目,于是新建了一个工程默认发现卧槽,build.gradle
不在像以前一样了,setting.gradle
反而多了写东西。那我的插件如何配置呢?于是Google一番,最终还是解决了,记录下来分享给有需要的人(我是预览版所以经常采坑,呵呵哈哈)。
旧版本gradle
构建的项目build.gradle
内容大致如下:
buildscript { ext.kotlin_version = '1.3.72' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
最新我使用的gradle
是gradle-7.1.1-bin.zip,gradle的Android插件版本是7.1.0-alpha08,新建的项目builde.gradle
空空如也
// 只剩下个clean任务了 task clean(type: Delete) { delete rootProject.buildDir }
然后呢,setting.gradle
中多出来很多东西
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } plugins { id 'com.android.application' version "${androidPluginVersion}" id 'com.android.library' version "${androidPluginVersion}" id 'org.jetbrains.kotlin.android' version "${kotlinPluginVersion}" } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "ZZ" include ':app'
从上面我们可以看出来,最近的gradle
引用插件的方式从buildscript切换到pluginManagement,不知道这样有什么好处(我也不懂,也不敢问啊┭┮﹏┭┮)
因为我要使用Google的Hilt
框架,所以需要使用kapt插件和Hilt插件,以往我们都是在build.gradle
中如下配置以后就可以在app/build.gradle
中使用了
buildscript { .... dependencies { ....... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "com.google.dagger:hilt-android-gradle-plugin:$hiltVersion" } }
那现在就需要再setting.gradle
的pluginManagement
中配置
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } plugins { id 'com.android.application' version "${androidPluginVersion}" id 'com.android.library' version "${androidPluginVersion}" id 'org.jetbrains.kotlin.android' version "${kotlinPluginVersion}" id 'org.jetbrains.kotlin.kapt' version "${kotlinPluginVersion}" // kapt插件 } }
这样就可以正常引用kapt了,但是Hilt
咋整呢,你如果也是通过plugins
中配置
id 'dagger.hilt.android.plugin' version "${hiltVersion}"
这样可不行,你编译时候就会报错找不到该插件了。因为插件库中没有,这个通过查看官方文档和其他项目知道可以通过resolutionStrategy这个属性来解决
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } plugins { id 'com.android.application' version "${androidPluginVersion}" id 'com.android.library' version "${androidPluginVersion}" id 'org.jetbrains.kotlin.android' version "${kotlinPluginVersion}" id 'org.jetbrains.kotlin.kapt' version "${kotlinPluginVersion}" } resolutionStrategy { eachPlugin { // Use `resolutionStrategy` to define the Hilt plugin and its coordinate if (requested.id.id == 'dagger.hilt.android.plugin') { useModule("com.google.dagger:hilt-android-gradle-plugin:${hiltVersion}") } } } }
这样你就可以在app/build.gradle
中使用相关插件了。那如果您使用其他插件同理也是这样做就可以了。
参考
1. Using Gradle Plugins
2. Hilt: An exception occurred applying plugin request [id: 'dagger.hilt.android.plugin']