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 class
把 everything 放在那里怎么样?然后尝试只使用-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 = true 时,应用程序无法使用 API
使用 Picasso 和 minifyEnabled 时应用程序崩溃 true