Gradle 8.11.1的升级之旅

如果大家的gradle版本之前是4.0.1或者4.2.0这种低版本,大家不要一下子就升到8.0版本,一定要一步步升级

第一步:gradle 4.0.1升级到7.4.2

build.gradle

javascript 复制代码
classpath('com.android.tools.build:gradle:7.4.2') {
    exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
}

gradle-wrapper.properties

ini 复制代码
#Fri Jun 04 10:47:21 CST 2021
#Mon Dec 23 09:50:17 CST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-7.5-bin.zip

maven插件修改为maven-publish

arduino 复制代码
apply plugin: 'maven-publish'

uploadArchives移除替换

ini 复制代码
uploadArchives {
    repositories.mavenDeployer {
        //本地仓库路径,以放到项目根目录下的 repo 的文件夹为例
        repository(url: uri('../repo'))

        //groupId
        pom.groupId = 'com.peakmain'

        //artifactId
        pom.artifactId = 'android.plugin'

        //插件版本号
        pom.version = '1.0.0'
    }
ini 复制代码
afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                groupId = 'com.peakmain'
                artifactId = 'android.plugin'
                version = '1.0.0'
                from components.java  // 只在 Java 项目中使用
                // 自动生成 POM 依赖配置
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    configurations.implementation.allDependencies.each {
                        if (it.group != null && it.name != null) {
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                        }
                    }
                }
            }
        }

        repositories {
            maven {
                url = uri('../repo')
            }
        }
    }
}

更推荐使用升级助手,可以节约大量时间

第二步:gradle 7.4.2 升级到 8.11.1

先说下我们公司的目前kotlin和gradle版本

kotlin版本 gradle插件版本 gradle版本 minSdkVersion targetSdkVersion java版本
1.6.10 4.1.1 6.7.1 21 33 11

我们升级后的目标是

kotlin版本 gradle插件版本 gradle版本 minSdkVersion targetSdkVersion java版本
2.1.0 8.10.1 8.11.1 21 33 17

build.gradle

javascript 复制代码
buildscript {
    ext.kotlin_version = '1.9.20'
    dependencies {
        classpath('com.android.tools.build:gradle:8.10.1') {
            exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
        }
    }
}

gradle-wrapper.properties

ini 复制代码
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-8.11.1-bin.zip

TheRouter升级

  • 官网的版本文档暴露的是1.2.4,但是这个不支持AGP 8,在官网的Issues中找到了相关解决办法
  • agp8.8.0 not support #247
arduino 复制代码
// root build.gradle 
classpath 'cn.therouter:plugin:1.3.0-rc4'

// app module 
apply plugin: 'therouter'

// dependencies
kapt "cn.therouter:apt:1.3.0-rc4"
implementation "cn.therouter:router:1.3.0-rc4"

com.huawei.agconnect升级

错误:

python 复制代码
What went wrong:
An exception occurred applying plugin request [id: 'com.huawei.agconnect']
> Failed to apply plugin 'com.huawei.agconnect'.
   > API 'android.registerTransform' is removed.

升级版本即可

arduino 复制代码
classpath 'com.huawei.agconnect:agcp:1.9.1.301'

火山埋点升级

arduino 复制代码
classpath 'com.bytedance.applog:RangersAppLog-All-plugin-agp8:6.17.1'

错误:Compose Compiler

Starting in Kotlin 2.0, the Compose Compiler Gradle plugin is required when compose is enabled. See the following link for more information: d.android.com/r/studio-ui...

从 Kotlin 2.0 开始,Jetpack Compose 不再自动使用默认的编译器插件,你必须手动声明 Compose Compiler 插件版本。

build.gradle

bash 复制代码
plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'org.jetbrains.kotlin.plugin.compose' version '2.1.0'
}

gradle.properties

  • 需要添加以下配置,否则会不生产BuildConfig类
ini 复制代码
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false

Namespace not specified

Namespace not specified. Specify a namespace in the module's build file:

模块缺少 namespace 配置项 ,而从 Android Gradle Plugin (AGP) 8.0 开始,namespace 是强制要求的,否则会构建失败

arduino 复制代码
android {
    namespace 'com.yourcompany.common' // ← 替换为该模块实际的包名
    ...
}

通常 namespace 对应你这个模块的 AndroidManifest.xml 中的 package 值。

比如,basic/common/src/main/AndroidManifest.xml 里有

ini 复制代码
<manifest package="com.yourcompany.common">

那么就配置成

arduino 复制代码
android {
    namespace 'com.yourcompany.common'
}

tasks 'compileDebugJavaWithJavac' (1.8) and 'kaptGenerateStubsDebugKotlin' (17).

Execution failed for task ':basic:library:kaptGenerateStubsDebugKotlin'. > Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (1.8) and 'kaptGenerateStubsDebugKotlin' (17).

两者 JVM 版本不一致,导致构建失败

build.gradle(所有对应模块的 build.gradle)里,设置统一的 Java 和 Kotlin 编译目标版本:

ini 复制代码
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}

补充

我在构建项目的时候莫名有个文件找不到了

arduino 复制代码
Unresolved reference 'ZuoYunMeetRoomCouponLookListAdapter'

但是我点击进入源码之后,源码能找到对应的代码,并且也能链接过去,但是构建就是报错,后面仔细发现是包名多了个空格

复制代码
com.peakmain. ui.ZuoYunMeetRoomCouponLookListAdapter

删除对应空格就好了

最后

大家最好还是用「升级助手」来升级,可以避免很多无谓的坑,因为它会给你自动添加一些配置。 也不要试图一下子从Gradle 4 升级到Gradle 8,先升级到7,再升级到8,可以避免很多莫名的坑

相关推荐
丘色果8 分钟前
NPM打包时,报reason: getaddrinfo ENOTFOUND registry.nlark.com
前端·npm·node.js
姜太小白15 分钟前
【前端】CSS Flexbox布局示例介绍
前端·css
我命由我1234533 分钟前
Spring Boot 项目问题:Web server failed to start. Port 5566 was already in use.
java·前端·jvm·spring boot·后端·spring·java-ee
南囝coding1 小时前
最近Vibe Coding的经验总结
前端·后端·程序员
前端小咸鱼一条1 小时前
React组件化的封装
前端·javascript·react.js
随便起的名字也被占用1 小时前
leaflet中绘制轨迹线的大量轨迹点,解决大量 marker 绑定 tooltip 同时显示导致的性能问题
前端·javascript·vue.js·leaflet
南方kenny1 小时前
TypeScript + React:让前端开发更可靠的黄金组合
前端·react.js·typescript
Cache技术分享1 小时前
149. Java Lambda 表达式 - Lambda 表达式的序列化
前端·后端
LaoZhangAI2 小时前
GPT-5推理能力全解析:o3架构、链式思考与2025年8月发布
前端·后端
JuneXcy2 小时前
11.Layout-Pinia优化重复请求
前端·javascript·css