【原创】AndroidStudio Gradle编译脚本中关于插件部分的变更

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 }

最新我使用的gradlegradle-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.gradlepluginManagement中配置

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中使用相关插件了。那如果您使用其他插件同理也是这样做就可以了。

===========================分割线

如果你是使用Java,在引入Hilt2.41版本编译会报错:

Execution failed for task ':app:hiltAggregateDepsDebug'. > A failure occurred while executing dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction > 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()'

这个就在你工程根目录下的build.gradle中添加如下即可

plugins { id 'com.android.application' version '7.3.0-alpha05' apply false id 'com.android.library' version '7.3.0-alpha05' apply false id 'dagger.hilt.android.plugin' version "${hiltVersion}" apply false // 就是这个 }

参考
1. Using Gradle Plugins
2. Hilt: An exception occurred applying plugin request [id: 'dagger.hilt.android.plugin']


__EOF__

本文作者拜雨
本文链接https://www.cnblogs.com/baiyuas/p/15171076.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   拜雨  阅读(1762)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示