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']