I've been struggling with exactly this issue since I had to upgrade to Gradle 8+ (in my case, it was forced by a Stripe dependency). I'm actually quite surprised by how little clear documentation exists about this from the Flutter team, given how common this upgrade path must be.
If you can't downgrade to Gradle 7, I found only one reliable solution - though I'm not entirely happy with it. You'll need to programmatically insert namespace definitions for each dependency. Here's what worked for me:
Add this code to your android/build.gradle
between the allprojects
block and rootProject.buildDir = '../build'
:
subprojects {
apply plugin: NamespacePlugin
}
class NamespacePlugin implements Plugin<Project> {
void apply(Project project) {
project.plugins.withId('com.android.application') {
project.android {
if (!namespace) {
namespace = project.group
println("WARNING! Manually setting namespace for Gradle 8 compatibility ($namespace)")
}
}
}
project.plugins.withId('com.android.library') {
project.android {
if (!namespace) {
namespace = project.group
println("WARNING! Manually setting namespace for Gradle 8.1 compatibility: ($namespace)")
}
}
}
}
}
This works, but honestly, I'm not thrilled with having to use this kind of workaround. I'd love to hear from someone more experienced with Android/Flutter development about whether this approach has any hidden gotchas or if there's a better way to handle this transition.
I'm particularly puzzled by the lack of official guidance on this - it seems like a pretty common issue that a lot of Flutter developers must be running into. Have you found any other solutions that worked better for you?