Flutter:在启用minifyEnabled的发布模式下,Firestore不可用错误

4

我一直遇到一个非常奇怪的错误。三年前我使用 Flutter 开发了一个应用程序,现在我将该应用程序迁移到了 Null Safety,从那时起,该应用程序在发布模式下崩溃并出现以下错误:

[cloud_firestore/unavailable] 服务当前不可用。 这很可能是暂时性问题,可以通过退避重试来纠正。

在调试模式下一切正常。

在 APK 编译的相关文件中,我有以下配置:

android/build.gradle

buildscript {
    ext.kotlin_version = '1.4.21'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath 'com.google.gms:google-services:4.3.8'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()

    }
}
...

android/app/build.gradle

...
android {

    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
        }
    }
}
...

proguard-rules.pro

## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-keep class com.google.firebase.** { *; }
-keep class com.revenuecat.purchases.** { *; }
-keep class androidx.lifecycle.DefaultLifecycleObserver
-dontwarn android.**

如果我将minifyEnabled false shrinkResources false更改为true,则发布模式下一切正常,但我的应用程序大小增加了27%。

你不是唯一一个看到这个问题的人。不幸的是,当我联系 Firebase 支持时,他们的答复是因为我们使用的是 Flutter,而 Flutter 并没有得到官方支持,所以他们无法提供帮助 - 真是太有用了。 - rmtmckenzie
这真的很令人沮丧,我的应用程序在生产中很长时间都没有问题,直到出现了这个错误。因此,我的开发停止了。我无法相信这个问题已经超过一年还没有解决。 - DAVID TEC
几个问题:(1)minifyEnabled false shrinkResources true怎么样?minifyEnabled true shrinkResources false呢?(2)-keep class并把所有东西都放在那里怎么样?然后尝试只保留部分类,等等。最终,您会发现哪些类应该被保留。 - ch271828n
你有没有找到这个问题的解决方案?我也遇到了同样的问题 [flutter 2.2.3] - CybeX
显示剩余2条评论
2个回答

1

你可以尝试使用Proguard而非R8,这可能是一个退步,但可能会有所帮助。为此,发布版本的配置应如下:

buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        shrinkResources true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    }
}

也许你应该在构建Gradle中添加不想使用R8的选项:

android.enableR8=true

另一种选择是查看此文件并检查导入以查看是否需要将某个辅助库添加到您的proguard配置文件中:/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant。
您还可以检查编译日志,以查看与某些库相关的任何错误(链接:https://github.com/flutter/flutter/issues/15100#issuecomment-474687849)。

1

您尝试过更新到相对较新的版本https://pub.dev/packages/cloud_firestore吗?例如当前的2.5.2版本?

您目前使用的是哪个版本?

请分享您的pubspec.yaml文件,有时插件也可能会发生冲突。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接