【问题标题】:google_maps_flutter doesn't work in releasegoogle_maps_flutter 在发行版中不起作用
【发布时间】:2021-07-17 16:52:44
【问题描述】:

我在 1 年前创建了简单的颤振应用程序(仅限 Android),但忘记了它。 现在突然之间它必须投入生产。 此应用包含 Firebase 身份验证、Firestore 数据库和带有 Places API 的谷歌地图。

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # Add this line
    sdk: flutter
  firebase_auth: ^0.14.0+5
  provider: ^3.1.0
  animated_text_kit: ^3.1.2
  liquid_pull_to_refresh: ^2.0.0
  url_launcher: ^5.7.10
  expandable: ^4.1.4
  image_picker: ^0.6.7+22
  http: ^0.12.1
  geoflutterfire: ^2.0.3+3
  flutter_spinkit: "^4.1.2"
  share: ^0.6.5
  intl: ^0.16.1
  firebase_messaging: ^6.0.1
  flutter_slidable: ^0.5.7
  country_code_picker: ^1.5.0
  flutter_rating_bar: ^3.1.0
  cloud_firestore: ^0.12.9+4
  google_maps_flutter: ^0.5.30
  cupertino_icons: ^1.0.0

在调试模式下一切正常。 但是现在当我开始发布并将它们放入 Play Console 时,我遇到了一个大问题。 谷歌地图(_这是应用程序的关键元素)不起作用(不可见)。 顺便说一句,Places API 有效。 我在这里阅读了所有问题,并在 Google 开发人员控制台和 Firebase 控制台中使用了 API 密钥限制(指纹)等等。 无济于事。 当我使用“flutter build appbundle”在本地机器上构建新版本时,我在日志中看到错误。

Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Note: C:\flutter\.pub-cache\hosted\pub.dartlang.org\cloud_firestore-0.13.7\android\src\main\java\io\flutter\plugins\
firebase\cloudfirestore\CloudFirestorePlugin.java uses or overrides a deprecated API.   

当我从 Play 商店(内部测试)获得应用程序后在设备上以发布模式运行应用程序时,我在有关 Google 地图的日志中看到此错误

E/flutter ( 7124): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: 
PlatformException(error, java.lang.IllegalStateException: Trying to create a platform view of unregistered type: plugins.flutter.io/google_maps
E/flutter ( 7124):      at io.flutter.plugin.platform.k$a.d(Unknown Source:229)
E/flutter ( 7124):      at io.flutter.embedding.engine.i.i$a.b(Unknown Source:152)
E/flutter ( 7124):      at io.flutter.embedding.engine.i.i$a.J(Unknown Source:144)
E/flutter ( 7124):      at c.a.d.a.i$a.a(Unknown Source:17)
E/flutter ( 7124):      at io.flutter.embedding.engine.e.b.d(Unknown Source:57)
E/flutter ( 7124):      at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(Unknown Source:4)
E/flutter ( 7124):      at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter ( 7124):      at android.os.MessageQueue.next(MessageQueue.java:379)
E/flutter ( 7124):      at android.os.Looper.loop(Looper.java:144)
E/flutter ( 7124):      at android.app.ActivityThread.main(ActivityThread.java:7529)
E/flutter ( 7124):      at java.lang.reflect.Method.invoke(Native Method)
E/flutter ( 7124):      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
E/flutter ( 7124):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
E/flutter ( 7124): , null, null)
E/flutter ( 7124): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582)
E/flutter ( 7124): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159)
E/flutter ( 7124): <asynchronous suspension>
E/flutter ( 7124): #2      TextureAndroidViewController._sendCreateMessage (package:flutter/src/services/platform_views.dart:1039)
E/flutter ( 7124): <asynchronous suspension>
E/flutter ( 7124): #3      AndroidViewController.create (package:flutter/src/services/platform_views.dart:749)
E/flutter ( 7124): <asynchronous suspension>
E/flutter ( 7124): #4      RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:174)
E/flutter ( 7124): <asynchronous suspensio

我是一名 JS 开发人员,所以 Dart 很容易掌握,但 Java 对我来说很难。 请说明问题。 这里发生了什么,在这种情况下该怎么办? 我将非常感激。 PS....在本地调试模式下一切正常。 此外,我创建了我的应用程序的副本并删除了除与 google-map 包相关的所有代码和依赖项并构建了新版本。没有地图出现。所以问题出在这个谷歌地图上,我认为没有依赖冲突。!!!另一项观察 - 图像选择器和 URL 启动器在从 Google Play 控制台发布时都不起作用。但是,如果我在本地运行 flutter run --release,一切都会好起来的。我想知道 - 也许我必须在 Play 控制台中添加一些访问策略或其他内容?

【问题讨论】:

  • 你是否在生产模式下使用互联网权限
  • 检查你在不同环境下是否安装了相同版本的cloudflare、flutter和firebase
  • 是的,我有互联网权限 -
  • 您好 MalcolmInTheCenter。你能详细说明吗?我不使用 cloudflare 如何查看版本?
  • 您使用的是受限的 Google Maps API 密钥吗?

标签: flutter google-maps google-cloud-firestore


【解决方案1】:

经过很长时间的搜索,主要感谢 Ruslanbek0809 的帮助,我终于解决了这个问题。
在 android/app/build.gradle 我添加了:
对于 buildTypes,shrinkResources false 和 minifyEnabled false

    buildTypes {
        release {
            signingConfig signingConfigs.release
            shrinkResources false
            minifyEnabled false
        }
    }

奇迹发生了

【讨论】:

    【解决方案2】:

    确保您在 Manifest 中添加了这行代码:

    <uses-permission android:name="android.permission.INTERNET" />
    

    【讨论】:

      【解决方案3】:
      • 卸载应用
      • 运行颤振命令flutter clean
      • 再次运行您的应用。

      注意:我没有完整阅读问题。这就是为什么这个答案不是为了发布而是为了调试 apk。

      【讨论】:

      • 我说的是内部测试中的发布应用程序。我想在哪里运行flutter clean?
      • @for-questions 哦,抱歉,我没有完全阅读您的问题。虽然这里C:\flutter\.pub-cache\hosted\pub.dartlang.org\cloud_firestore-0.13.7\android\src\main\java\io\flutter\plugins\ firebase\cloudfirestore\CloudFirestorePlugin.java uses or overrides a deprecated API 它说你应该升级cloud_firestore 包。你应该在你的应用程序中升级你的flutter sdkflutter packages。如果需要,您可能还应该阅读 migration guides 的软件包。如果有的话,这是由于重大更改造成的。
      • 无需抱歉。感谢您的帮助
      • @for-questions 仔细阅读我上一条评论并尝试应用这些方法
      • 你无法想象我有多感激
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多