【问题标题】:Dart/ flutter: application crashes on startupDart/flutter:应用程序在启动时崩溃
【发布时间】:2018-10-22 04:20:20
【问题描述】:

我有一个非常有趣的问题,我可以在模拟器上很好地运行我的应用程序,flutter build apk 成功,我可以在 Google Play 上发布新版本或者只是在我的手机上安装apk(Pixel 2 XL,目前在 4 月的安全补丁中)。

但是当我在手机上启动它时,它会立即崩溃。我还没有尝试安装debug apk,首先我想应用五月补丁。

我已经尝试过多次升级颤振,但似乎也没有任何问题:

C:\Android\osszefogasaszanhuzokert>flutter upgrade
Upgrading Flutter from c:\Android\flutter...
From https://github.com/flutter/flutter
   3d3673a34..23098dde5  master     -> origin/master
Already up to date.

Upgrading engine...
Already up-to-date.

Flutter 0.3.6-pre.81 • channel beta • https://github.com/flutter/flutter.git
Framework • revision 2849bc04ff (10 days ago) • 2018-05-01 20:07:45 -0700
Engine • revision d5c1117170
Tools • Dart 2.0.0-dev.52.0.flutter-011676641a

Running "flutter packages upgrade" in osszefogasaszanhuzokert... 14.4s

Running flutter doctor...
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, v0.3.6-pre.81, on Microsoft Windows [Version 10.0.15063], locale en-GB)
[√] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[√] Android Studio (version 3.1)
[√] Connected devices (1 available)

• No issues found!

我最近更换了笔记本电脑,并在这台新笔记本电脑上查看了我的代码的 git 存储库。有一些问题,但我最终解决了这些问题。唯一的区别是现在的项目名称只是osszefogasaszanhuzokert,而包名称是osszefogasaszanhuzokert2 - 但我认为这不会造成任何问题。

我的猜测是问题出在我的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zgyorkei.osszefogasaszanhuzokert2">

    <!-- The INTERNET permission is required for development. Specifically,
         flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Összefogás A Szánhúzókért"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name="com.zgyorkei.osszefogasaszanhuzokert2.MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- This keeps the window background of the activity showing
                 until Flutter renders its first frame. It can be removed if
                 there is no splash screen (such as the default splash screen
                 defined in @style/LaunchTheme). -->
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Android Studio 将几个属性标记为不允许,但正如您所见,我几乎将所有属性都保留为默认值 - 除了我出于明显的原因更改了 android:label

编辑:我安装了调试 apk,它运行良好。但是,我能够得到发布apk崩溃的adb logcat,问题似乎如下:

05-12 07:38:23.341 29595 29595 I crash_dump32: performing dump of process 29560 (target tid = 29560)
05-12 07:38:23.341 29595 29595 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-12 07:38:23.341 29595 29595 F DEBUG   : Build fingerprint: 'google/taimen/taimen:8.1.0/OPM2.171019.029.B1/4720900:user/release-keys'
05-12 07:38:23.341 29595 29595 F DEBUG   : Revision: 'rev_10'
05-12 07:38:23.341 29595 29595 F DEBUG   : ABI: 'arm'
05-12 07:38:23.341 29595 29595 F DEBUG   : pid: 29560, tid: 29560, name: saszanhuzokert2  >>> com.zgyorkei.osszefogasaszanhuzokert2 <<<
05-12 07:38:23.342 29595 29595 F DEBUG   : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
05-12 07:38:23.343 29595 29595 F DEBUG   : Abort message: '[FATAL:flutter/runtime/dart_vm.cc(409)] Error while initializing the Dart VM: Snapshot not compatible with the current VM configuration: the snapshot requires 'product no-type_checks no-asserts no-error_on_bad_type no-error_on_bad_override arm-eabi hardfp' but the VM has 'product no-type_checks no-asserts no-error_on_bad_type no-error_on_bad_override arm-eabi softfp'

如何将Dart VM 更改为使用hardfp 而不是softfp

【问题讨论】:

  • adb logcat,查看设备崩溃时打印的内容 - 这可能需要调试构建
  • 感谢您的提示。调试 apk 就像我想要的那样在手机上工作,但是当我提取发布 apk 的 adb logcat 时,carsh 报告(添加到问题中)显示 Dart VM 使用 softfp 而不是 hardfp。据我所知,这是一些架构级别的东西,它可能是 Dart VM 的错误。或者我应该在 build.gradle 或 AndroidManifest.xml 中更改什么以强制使用 hardfp?
  • 啊,可能是github.com/flutter/flutter/issues/17387。如果你切换到master,现在应该已经修复了
  • 是的,这就是问题所在。谢谢! ;)
  • 我也有同样的问题,尤其是 firebase 插件。我认为问题在于您使用的是什么版本的颤振以及 firebase 插件使用的是什么

标签: dart flutter


【解决方案1】:

我遇到的问题是由于“firebase_crashlytics”没有正确安装。

在我的情况下,[project]/android/build.gradle[project]/android/build.gradle 中的条目基本上没有正确更新,这只是导致应用程序崩溃而没有任何日志中的任何详细信息。

然后我重做了插件“ReadMe”部分中的所有步骤,效果很好。

https://pub.dev/packages/firebase_crashlytics

基本上,当您在没有任何日志帮助您的情况下遇到应用崩溃错误时,请确保您检查新添加的插件并确保您已正确安装它们。

【讨论】:

    【解决方案2】:

    android\build.gradle

    classpath 'com.android.tools.build:gradle:3.5.0'
    

    结合新发布的Gradle 6.6,所以gradle\wrapper\gradle-wrapper.properties

    distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-all.zip
    

    【讨论】:

      【解决方案3】:

      在终端上,我使用了:

      flutter pub upgrade
      

      【讨论】:

        【解决方案4】:

        就我而言,我只需要运行:

        flutter build apk --release --no-shrink
        

        【讨论】:

        • 与此相关,我注意到标志 android.enableR8 在构建时在 android/gradle.properties 中创建为 true,我也将其设置为 false。总是在删除时再次创建为 true。
        • flutter build apk --debug-- no-shrink,以防您不想发布一个
        【解决方案5】:

        从这里: https://stackoverflow.com/a/69234372/487812

        这是 Flutter 最新版本的问题,我用 在 eidt 下方,

        这是一种解决方法,它对我有用。

        1. 转至MainActivity.kt
        2. 导入 import android.os.Build
        3. 粘贴此override fun onFlutterUiDisplayed() { if (Build.VERSION.SDK_INT &gt;= 100) { //I gave 100 just to confirm , it shoud be android ver 10 reportFullyDrawn(); } }
        4. flutter clean
        5. flutter run

        【讨论】:

          【解决方案6】:

          我有同样的问题。对我来说,这发生在我重命名我的应用程序并更改包名称之后。我没有为 android 正确执行此操作。

          在关注this guide of how to change the package name 之后,对于 android 来说一切正常。

          确保AndroidManifest.xmlandroid/app/build.gradleandroid/app/src/.../MainActivity.java中的包名相同。还要检查 ios/Runner/Info.plist 的值 CFBundleName 对于 iOS 版本。

          【讨论】:

          • 这可能不是 OP 的正确答案,但它确实帮助了我。我更改了我的包名,也忘了编辑 MainActivity 一个。
          • Kotlin 设计的 Flutter 应用程序是否也是如此?
          • 错过了在 android/app/src/.../MainActivity.kt 中重命名包,谢谢!
          • 这不是这个问题的正确答案,但修复了我的构建!您是否应该将此作为单独主题的问答重新发布?
          • 对于 Flutter 应用程序,您还需要更改 MainActivity.kt 以及上面提到的所有其他文件。我已经更改了以上所有内容,只是发现我的应用程序也在启动并崩溃,直到完成为止。
          【解决方案7】:

          打开 android studio,从 gradle 获取 SHA 密钥并在 google 控制台中更新密钥,将您的 google JSON 列表上传到您的项目中,确保您的 SHA 密钥应该是唯一的,使用以下命令获取文件夹:

          谷歌 SHA

          keytool -exportcert -list -v -alias foldername -keystore /directory
          

          【讨论】:

            【解决方案8】:

            就我而言,问题在于我使用的是 Android Studio 版本 3.6.1 和 gradle-wrapper.properties 分发版本 6.0.0-all。为了解决这个问题,我将其更改为 4.10.1-all 。

            【讨论】:

              【解决方案9】:

              我遇到了同样的问题,这里的任何选项都没有帮助我。最后,我发现了 logcat 并意识到我的应用程序由于 Crashlytics 包而崩溃。

              简而言之,我在终端中运行了以下命令以显示来自设备的日志,这不仅帮助我找到了罪魁祸首,而且帮助我解决了问题。你可以让它在后台运行。

              adb logcat
              

              您可能需要在path 环境变量中添加以下路径。或者只是 cd 给它。

              C:\Users\[USERNAME]\AppData\Local\Android\sdk\platform-tools

              请参阅下面的输出。我确信如果由于某种原因再次发生这种情况,我应该能够找出原因,而不是推测是什么原因造成的。

              【讨论】:

                【解决方案10】:

                正如莫拉德所说,没有正确引用 AdMob 会导致您的应用在启动时崩溃,甚至可能无法提供有关崩溃的线索。这适用于 iOS 和 Android。

                Android - 在 AndroidManifest.xml 中

                <meta-data
                    android:name="com.google.android.gms.ads.APPLICATION_ID"
                    android:value="your-app-id"/>
                

                iOS - 在 Info.plist 中

                    <key>GADApplicationIdentifier</key>
                    <string>your-app-id</string>
                

                按照此处的说明进行操作:https://pub.dev/packages/firebase_admob

                如果您不知道自己的 App ID,可以在https://admob.google.com 找到它 并在左侧点击“应用程序”,然后点击“查看所有应用程序”(只要您已经设置了广告)。

                【讨论】:

                  【解决方案11】:

                  对我来说,这是因为我使用了 admob,忘记将 APPLICATION_ID 添加到 AndroidManifest.xml

                  <meta-data
                      android:name="com.google.android.gms.ads.APPLICATION_ID"
                      android:value="app-id"/>
                  

                  【讨论】:

                    【解决方案12】:

                    在 android studio 工作期间: 我遇到了同样的问题,但最后我得出的结论是,当您在位于您的应用程序“根目录”的名为 pubspec.yaml 的文件上添加新的依赖项时,并且该依赖项未以正确的方式配置,例如 {{flutter_facebook_login: ^1.2. 0}} 因此,如果您需要它,请以正确的方式配置它或根本不使用它。 ^_^ 祝你有美好的一天at android studio

                    【讨论】:

                      【解决方案13】:

                      我解决了一天后,上面的建议没有任何帮助,因为我已经全部尝试过了。其中:

                      • 扑干净
                      • 颤振升级
                      • 检查 gradle 和 manifests 中的包是否相同
                      • multiDexEnable 真
                      • 和其他解决方案...

                      在我的情况下,我升级颤振时的解决方案是这样的:

                        classpath 'com.android.tools.build:gradle:3.3.1'
                      

                        classpath 'com.android.tools.build:gradle:3.3.2'
                      

                      没错,更新工具gradle就够了。事实上,项目编译没有错误并启动了应用程序。但是当应用程序启动时它会自行关闭而没有任何错误消息。所以要小心gradle。我希望这样可以减轻您数小时的压力。

                      【讨论】:

                        【解决方案14】:

                        这不是对这个问题的直接答案,但我遇到了类似的问题并最终出现在这里。其他人也可以来。

                        我的问题:应用在模拟器上首次启动时崩溃

                        我的解决方案:运行flutter clean清除缓存

                        【讨论】:

                          【解决方案15】:

                          对于那些使用 Kotlin 进行了重构/更改包名称并且上述方法均无效的人(我的情况),请检查:确保在您的 app/src/main 目录中是 app/src/main/javaapp/src/main/kotlin 目录中的 MainActivity 文件。对我来说,java 文件夹中没有文件,这导致了崩溃(当然,请确保您也完成了上述所有操作)。

                          【讨论】:

                          • 你是怎么解决的?你是如何添加 MainActivity.java 的?我面临这个错误,以上都不起作用
                          【解决方案16】:

                          解决此错误的最简单方法

                          更改包名时会发生此错误

                          为了以正确的方式更改您的包名称,您必须按照以下步骤操作

                          通过以下步骤,您可以解决此错误

                          第 1 步:-

                          1.转到:---

                          项目>[your_app_name]>Android [your_app_name]>app>src

                          在 src 文件夹中你可以找到 3 个文件 Debug,main & profile

                          单独转到每个文件并更改其 AndroidManifest.xml 文件的包名称

                          现在,你离解决这个错误只有一半了。

                          第 2 步:-

                          现在,转到位于

                          中的 build.gradle 文件

                          project>[your_app_name]>Android [your_app_name]>app>build.gradle

                          在这里你可以找到这个代码defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.appname" minSdkVersion 16 targetSdkVersion 29 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" }

                          只需将包名 com.example.appname 更改为您合适的包名

                          第三步:-

                          现在去

                          项目>[your_app_name]>Android [your_app_name]>app>src>main>java>mainactivity

                          ***注意******如果你使用 Kotlin 和 Flutter,那么你必须去这里:--

                          项目>[your_app_name]>Android [your_app_name]>app>src>main>kotlin>mainactivity

                          你可以在Mainactivity.kotlinma​​inactivity.java之后更改你应用的包名

                          它应该可以完美运行...请对此提供反馈。

                          不要忘记更改文件夹的包名称 [转到 src>main>kotlin 或 java>com.example.app]

                          【讨论】:

                          • 非常感谢!我的问题出在“Main”下的 Manafest 中,包名称 activity android:name= 的 Activity 值错误
                          • 正是我的问题。好的提示是寻找“com”。在您的整个项目中,如果您在某个时候更新它,请检查旧包名称
                          • 我在想文件夹路径会修复它。但实际上是新包装询问了android权限
                          • 亲爱的你太棒了,它就像魅力一样,救了我的命,谢谢:)
                          • 救生解决方案
                          【解决方案17】:

                          我遇到了同样的行为(应用程序在启动时关闭,没有任何错误或警告等)并使用 command 解决了它:

                          flutter clean
                          

                          当我有一段时间(几个月)没有在模拟器上重新启动应用程序时,我就发生了这种情况。而且我猜与一些 Flutter 更新/等有关。

                          【讨论】:

                            【解决方案18】:

                            它让我崩溃的原因是因为启动时有第三方库。 要检查导致崩溃的库,请在 Android Studio 上转到 View &gt; Tool Windows &gt; Logcat,使用 Logcat 查看日志。然后,重新启动应用程序并检查输出。对我来说,导致崩溃的是 Firebase Auth 库。我刚刚更新了那个库来解决我的问题。我希望这可以帮助别人。如果没有,“保持冷静,继续阅读,你最终会找到的”。

                            【讨论】:

                              【解决方案19】:

                              在一些架构不同的手机上遇到了同样的问题。当我打开它时,该应用程序开始崩溃。这是一个对我有用的修复:

                              defaultConfig {
                                  ...
                                  multiDexEnabled true
                                  ndk {
                                      abiFilters 'x86', 'armeabi-v7a'
                                  }
                              }
                              

                              必须在android/app/build.gradle 文件中添加ndk,它就像一个魅力。

                              我希望这可以帮助某人。

                              【讨论】:

                              • 不确定它是 multidex 还是 ndk,但这为我解决了问题。
                              • 请注意:当我将此添加到我的app/build.gradle 并尝试构建应用程序包 (flutter build appbundle) 时,它从应用程序包中剥离了除 1 之外的所有架构。我不是确定修复,但在使用它并与 appbundles 一起部署时要小心
                              【解决方案20】:

                              解决办法如下:

                              在 build.gradle 文件中如下:

                              buildTypes {
                                      release {
                                          // TODO: Add your own signing config for the release build.
                                          // Signing with the debug keys for now, so `flutter run --release` works.
                                   //       signingConfig signingConfigs.debug
                                          // colocado isso para release
                                          signingConfig signingConfigs.release
                              
                                          minifyEnabled true
                                          useProguard true
                                          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                                      }
                                  }
                              

                              只需将 minifyEnabled 和 useProguard 更改为 false 并再次运行 flutter build。

                              【讨论】:

                                【解决方案21】:

                                flutter 升级后我遇到了同样的问题。

                                在我的应用程序中,multiDexEnabled true 已在 build.gradle 文件中启用,并且在升级前它工作正常。 我之前添加了它以修复另一个崩溃。

                                请参阅:Flutter android app crashes upon startup if I include a certain package

                                【讨论】:

                                  猜你喜欢
                                  • 2019-01-24
                                  • 2021-01-15
                                  • 2020-08-28
                                  • 2020-03-25
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-09-02
                                  相关资源
                                  最近更新 更多