Flutter :shrinker 可能没有优化 Java 字节码

roy*_*y_m 17 java android firebase flutter google-cloud-firestore

我正在尝试将 cloud firestore 集成到 android 应用程序,但每次我得到的都是这个错误

在调试模式下在为 x86 构建的 Android SDK 上启动 lib/main.dart... 注意:/home/tr/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.4+2/ android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java 使用未经检查或不安全的操作。注意:使用 -Xlint:unchecked 重新编译以获取详细信息。D8:无法在单个 dex 文件中容纳请求的类(# 方法:76095 > 65536)com.android.builder.dexing.DexArchiveMergerException:合并 dex 档案时出错:.dex 文件中的方法引用数不能超过 64K

FAILURE:构建失败,出现异常。

  • 出了什么问题:任务 ':app:mergeDexDebug' 执行失败。

    执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade com.android.builder.dexing.DexArchiveMergerException 时发生故障:合并 dex 档案时出错:.dex 文件中的方法引用数不能超过 64K。在https://developer.android.com/tools/building/multidex.html了解如何解决此问题

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

  • https://help.gradle.org获取更多帮助

BUILD FAILED in 6m 10s [!] 压缩器可能未能优化 Java 字节码。要禁用收缩器,请将--no-shrink标志传递给此命令。要了解更多信息,请参阅:https : //developer.android.com/studio/build/shrink-code Exception: Gradle task assembleDebug failed with exit code 1 Exited (sigterm)

小智 69

在应用程序的 build.gradle 中

 defaultConfig {
        applicationId "com.company.test"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 }
Run Code Online (Sandbox Code Playgroud)

将 minSdkversion 从 16 更改为 21,这在我的情况下有效


May*_*wal 15

您只需将 minsdkversion 更改为 21 而不是 16。(在应用程序的 build.gradle 中)

 defaultConfig {
        applicationId "com.company.example"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 }
Run Code Online (Sandbox Code Playgroud)

它工作或我。;)


小智 10

我在使用颤振编码时遇到了类似的问题,但--no-shrinkBUILD FAILED in 9s Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done 11.0s [!] The shrinker may have failed to optimize the Java bytecode. To disable the shrinker, pass the
flag to this command. To learn more, see: https://developer.android.com/studio/build/shrink-code Gradle task assembleDebug failed with exit code 1

但是我设法运行了我的应用程序,这就是我做到的。

1.我找到了 android/app/build.gradle 文件 2. 然后在 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
    }
}
Run Code Online (Sandbox Code Playgroud)

}

并将其更改为

buildTypes {
    debug {
        minifyEnabled true

        // 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
    }
}
Run Code Online (Sandbox Code Playgroud)

}

该应用程序能够在 Android 模拟器中运行


Tom*_*mez 7

这个问题有两种不同的答案,但我认为最合适的是@Sarang Pal给出的答案这是Google的官方解释:

Android 构建失败故障排除:

如果您计划使用 Android 设备或模拟器进行开发,则需要处理多 dex 支持——否则,您的构建将失败,并显示“无法在单个 dex 文件中容纳请求的类”。

默认情况下,Flutter 支持 Android SDK v16(Jelly Bean,2012 年发布),但 multidex 并不能真正与 Jelly Bean 一起使用(尽管有可能)。配置 Jelly Bean 工作超出了本 Codelab 的范围,因此我们将最低目标 SDK 版本从 v16 更改为 v21(Lollipop,2014 年发布)。

要更改最低目标 SDK 版本:

  1. 打开 android/app/build.gradle,然后找到显示 minSdkVersion 16 的行。
  2. 将该行更改为 minSdkVersion 21。
  3. 保存文件。

https://codelabs.developers.google.com/codelabs/flutter-firebase/index.html#3


tec*_*sam 6

导航到 {your-app-name}\android\app\build.gradle

// 将 minSdkVersion 从 16 更改为 21

defaultConfig {
    applicationId "com.example.testapp"
    minSdkVersion 21 
    targetSdkVersion 29
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName

}
Run Code Online (Sandbox Code Playgroud)


小智 5

只需更改minSdkVersion为 21 即可运行

defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.flutter_app"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

我尝试了上面的每一步,但没有成功。

最后,我在终端内使用这些命令解决了问题:

$: flutter clean

$: flutter pub get
Run Code Online (Sandbox Code Playgroud)

一切都很顺利。