Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”
Posted
技术标签:
【中文标题】Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”【英文标题】:Flutter: Build errors for cloud_firestore: above version "0.7.4" 【发布时间】:2019-04-03 11:46:16 【问题描述】:几个小时以来,我一直在尝试解决构建问题,直到我意识到这是由于 Flutter 插件 cloud_firestore 造成的。 0.7.4 版适用于 android 和 ios,但任何高于 0.7.4 的版本(例如 0.8.2+1)都会出现以下错误:
CloudFirestorePlugin.java:160:错误:找不到符号 查询 = query.whereArrayContains(fieldName, value); ^ 符号:方法 whereArrayContains(String,Object) 位置:类型的变量查询 询问 /dev/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.8.2+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java:598: 错误:找不到符号 builder.setTimestampsInSnapshotsEnabled( ^ 符号:方法 setTimestampsInSnapshotsEnabled(Boolean) 位置:变量生成器 建造者类型 /dev/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.8.2+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java:678: 错误:找不到符号 返回 FieldValue.arrayUnion(toArray(readValue(buffer))); ^ 符号:方法 arrayUnion(Object[]) 位置:类 FieldValue /dev/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.8.2+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java:680: 错误:找不到符号 返回 FieldValue.arrayRemove(toArray(readValue(buffer))); ^ 符号:方法 arrayRemove(Object[]) 位置:类 FieldValue 注意: /Users/peterlumdev/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.8.2+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java 使用未经检查或不安全的操作。注意:重新编译 -Xlint:详细信息未选中。 4 个错误 FAILURE:构建失败并出现异常。 * 出了什么问题:任务 ':cloud_firestore:compileDebugJavaWithJavac' 执行失败。
编译失败;有关详细信息,请参阅编译器错误输出。 * 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 * 在 https://help.gradle.orgBUILD FAILED 获得更多帮助 Gradle 任务 assembleDebug failed with exit code 1
由于得到了
await db.settings(timestampsInSnapshotsEnabled: true);
在这里感谢一些帮助。非常感谢!
【问题讨论】:
您在 Android 和 iOS 上都遇到错误吗? 我只收到 Android 错误。 我也遇到了同样的错误,仅适用于 Android。但是,当我通过 Finder 重新插入 google-services.json 时,错误消失了。 我替换了 google-services.json 文件,但仍然无法为 Android 构建:FAILURE: Build failed with an exception。 * 出了什么问题:任务 ':cloud_firestore:compileDebugJavaWithJavac' 执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出 你不是把文件放到Android Studio里了吗?这似乎与我的情况不同。 【参考方案1】:google-services.json 有问题。
就我而言,我在 Google Codelabs 上编写 Firebase for Flutter 时遇到了同样的情况。我将 GoogleService-Info.plist 放在 Xcode 中的相应文件夹中,并将 google-services.json 放在 Adndroid Studio 中的相应文件夹中。 iOS Simulator 工作正常,但在 Android Studio 中显示如下窗口,然后按 OK 按钮并启动 Android Emulator 导致相应的错误。
从头开始编码并从 Finder 而不是 Android Studio 插入 google-services.json 文件时,未发生错误。
【讨论】:
【参考方案2】:它不起作用,因为它正在创建 gradle 冲突。 firestore 0.7.3 版正在运行,因为 gradle 工具已在该版本更新。请参考 changelog 并参考此 answer 了解任何其他工作版本的 firebase 产品。
【讨论】:
【参考方案3】:我感觉到你了,我也花了好几个小时试图弄清楚这一点。
在构建 SSCCE,然后将该项目的设置应用到我的项目,然后进行一些调整后,我的项目开始工作了。
虽然我调整的设置比我想记住的要多,但这些似乎影响最大:
在pubspec.yaml
:
# included two other common libraries others might use
cloud_firestore: 0.8.2+1
firebase_auth: 0.7.0
google_sign_in: 3.2.4
在android/gradle.properties
中明确禁用这两个功能:
android.useAndroidX=false
android.enableJetifier=false
在android/build.grade
中使用这些版本的依赖项:
dependencies
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:4.2.0'
最后,在android/app/build.gradle
中使用这些设置:
android
compileSdkVersion 27
...
defaultConfig
...
minSdkVersion 21
targetSdkVersion 28
multiDexEnabled true
...
...
...
dependencies
implementation 'com.google.firebase:firebase-core:16.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
compile 'com.android.support:multidex:1.0.3'
还值得注意的是,我再次下载了google-services.json
文件(尽管它本身没有任何效果)。
这些设置的任意组合都可能对您有所帮助。
【讨论】:
以上是关于Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”
Flutter (iOS) - 在 GeneratedPluginRegistrant.m 中找不到模块“cloud_firestore”
I/flutter (22027):MissingPluginException(在通道 plugins.flutter.io/cloud_firestore 上找不到方法 DocumentRefer
Flutter cloud_firestore 系统日期对象的设置/警告