Flutter:使用 minifyEnabled 的发布模式下的 Firestore 不可用错误

Posted

技术标签:

【中文标题】Flutter:使用 minifyEnabled 的发布模式下的 Firestore 不可用错误【英文标题】:Flutter: Firestore unavailable error on release mode with minifyEnabled 【发布时间】:2021-11-04 17:49:33 【问题描述】:

我遇到了一个非常奇怪的错误。我一直在用颤振开发一个应用程序一段时间(3 年前)。我将应用程序迁移到 Null 安全,从那一刻起,应用程序开始在发布模式下崩溃,导致错误

[cloud_firestore/unavailable] 该服务当前不可用。 这很可能是暂时的情况,可以通过回退重试来纠正。

在调试模式下一切正常。

我在release模式下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 更改为 Everything 在发布模式上也可以正常工作,但我的应用程序大小增加了 27%。

【问题讨论】:

你不是唯一看到这个的人。不幸的是,当我联系 firebase 支持时,他们的回答是他们帮不上忙,因为我们使用了不受官方支持的颤振 - 非常有帮助。 这里有几个可能有用的资源:@​​987654321@ 和 a deep-dive on the react native plugin which shares a bunch of code with the flutter one 这非常令人沮丧,我的应用程序在生产中很长一段时间都没有问题,直到出现此错误。正因为如此,我的发展停止了。我不敢相信这个问题已经一年多没有解决了。 几个问题:(1)minifyEnabled false shrinkResources true呢? minifyEnabled true shrinkResources false 呢? (2) -keep classeverything 放在那里怎么样?然后尝试只使用-keep 部分类,以此类推。最后,你会发现应该保留哪个类。 您找到解决方案了吗?有同样的问题[flutter 2.2.3] 【参考方案1】:

可能对您有用的一件事是重新使用 proguard 而不是 R8,这可能是退后一步,但可以帮助您。为此,发布的配置应如下所示:

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

也许你应该添加你不想使用 R8 的构建 gradle:

android.enableR8=true

另一种选择是查看此文件并检查导入以查看是否有可能需要添加到 proguard 配置文件的辅助库:/android/app/src/main/java/io/flutter /plugins/GeneratedPluginRegistrant

您还可以查看编译日志以查看与某些库相关的任何错误(链接:https://github.com/flutter/flutter/issues/15100#issuecomment-474687849)

【讨论】:

【参考方案2】:

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

您目前使用的是什么版本?

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

【讨论】:

以上是关于Flutter:使用 minifyEnabled 的发布模式下的 Firestore 不可用错误的主要内容,如果未能解决你的问题,请参考以下文章

Android 因 minifyEnabled 和 AWS 调用而崩溃

当我使用 minifyEnabled 应用程序时不断崩溃

当我设置 minifyEnabled = true 时,应用程序无法使用 API

使用 Picasso 和 minifyEnabled 时应用程序崩溃 true

设置 minifyEnabled 为 true 时无法使用 GSON 解析 json 对象

仅针对外部库将“minifyEnabled”设置为“false”