Bug记录 aab打包失败,apk打包成功

问题记录:

项目正常运行,build没问题,apk可以正常打包,但是aab打包死活不行,报错

打包报错> Task :app:packageReleaseBundle FAILED Execution failed for task ':app:packageReleaseBundle'. > A failure occurred while executing com.android.build.gradle.internal.tasks.PackageBundleTask$BundleToolWorkAction > 'com.google.common.collect.ImmutableMap com.google.common.collect.ImmutableMap$Builder.buildOrThrow()'

网上找了些解决方案:

方法 1:强制使用 Guava 兼容版本

这个错误涉及 com.google.common.collect.ImmutableMap,它是 Guava 库的一部分。某些 Gradle 版本可能依赖了较新的 Guava 32+,而你的项目可能依赖的是较老版本。

gradle.properties 添加

android.useAndroidX=true android.enableJetifier=true

然后,在 app/build.gradle 里强制指定 Guava 版本:

dependencies { implementation 'com.google.guava:guava:31.0.1-jre' }

结果:无效

方法 2:清理 Gradle 缓存

可能是 Gradle 依赖缓存损坏 了。尝试清理并重新构建:

./gradlew clean

rm -rf ~/.gradle/caches

./gradlew build

然后 重新打包 AAB

./gradlew bundleRelease

本人解决方案 

因为是新项目,创建项目时,自动创建了libs.versions.toml文件

只需要在app的build.gradle下

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
}

libs.versions.toml配置版本

[versions]
agp = "8.7.3"
kotlin = "1.8.0"
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

这样就不需要在项目的build.gradle下进行配置了。

所以,我直接没有用这个新东西了,在app的build.gradle下

apply plugin: 'com.android.application'
apply plugin: 'org.jetbrains.kotlin.android'

在项目的build.gradle下

 dependencies {
        classpath "com.android.tools.build:gradle:8.7.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
        classpath 'com.google.gms:google-services:4.3.15'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
    }

然后就可以正常打包aab了。

问题分析

1. plugins {} vs apply plugin ''

  • plugins {} (新 DSL 方式)
    这个方式是在 Gradle 7.0 之后引入的现代 DSL(Domain-Specific Language)。
    它需要插件在 settings.gradle 里使用 pluginManagement 进行管理,并且在 build.gradle 里通过 libs.XXX 解析。
    可能 libs.plugins.android.application 未正确解析或与 Gradle 版本不兼容,导致 AAB 打包失败。

  • apply plugin '' (旧方式)
    传统方式 不会受 pluginManagement 影响,直接按照 build.gradle 里的 classpath 依赖加载插件。
    你手动 apply plugin 之后,Gradle 能正确解析 AGP(Android Gradle Plugin)和 Kotlin 插件的版本,避免了依赖冲突。

2.setting.gradle

可能是这里面的pluginManagement.repositories的配置进行了干扰,因为自己对库进行了限制,草!

你可能感兴趣的:(bug)