为什么在 android 设备中 运行 项目时会发生与 flutter 相关的 firebase 相关错误?

Why is this firebase related error in flutter happen while running project in android device?

我的 flutter 项目出现了一些与 firebase 相关的错误。 它需要 androidx 支持所以我通过这个命令创建了一个新项目

flutter create --androidx -t app --org com.giftbaar.flash_chat -a kotlin -i swift flash_chat

flutter pub get 运行良好,然后我 运行 我的项目到 Android 模拟器,这是我使用 flutter run 命令

的错误
abhishekkumar@Abhisheks-MacBook-Air flash_chat % flutter run

Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider enabling software rendering with
"--enable-software-rendering".
Launching lib/main.dart on Android SDK built for x86 in debug mode...
Running Gradle task 'assembleDebug'...                                  
Note: /Users/abhishekkumar/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+2/android/src/main/java/io/flutter/plugins/firebase/core/FirebaseCorePlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.                                                               
Note: /Users/abhishekkumar/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.0+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.                                                                 
D8: Cannot fit requested classes in a single dex file (# methods: 81454 > 65536)                                   
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:                            
The number of method references in a .dex file cannot exceed 64K.                                                  
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html                      
        at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:131)        
        at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:118)             
        at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:102)
        at com.android.build.gradle.internal.tasks.DexMergingTaskRunnable.run(DexMergingTask.kt:444)               
        at com.android.build.gradle.internal.tasks.Workers$ActionFacade.run(Workers.kt:335)                        
        at org.gradle.workers.internal.AdapterWorkAction.execute(AdapterWorkAction.java:50)                        
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:47)                    
        at org.gradle.workers.internal.NoIsolationWorkerFactory.create(NoIsolationWorkerFactory.java:65)     
        at org.gradle.workers.internal.NoIsolationWorkerFactory.create(NoIsolationWorkerFactory.java:61)     
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:98)         
        at org.gradle.workers.internal.NoIsolationWorkerFactory.execute(NoIsolationWorkerFactory.java:61)      
        at org.gradle.workers.internal.AbstractWorker.call(AbstractWorker.java:44)                               
        at org.gradle.workers.internal.AbstractWorker.call(AbstractWorker.java:41)                               
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)       
        at org.gradle.workers.internal.NoIsolationWorkerFactory.execute(NoIsolationWorkerFactory.java:56)        
        at org.gradle.workers.internal.DefaultWorkerExecutor.call(DefaultWorkerExecutor.java:215)                
        at org.gradle.workers.internal.DefaultWorkerExecutor.call(DefaultWorkerExecutor.java:210)                
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)                                                
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:215)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
        at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)                                 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)                                                
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)  
        at org.gradle.internal.concurrent.ManagedExecutorImpl.run(ManagedExecutorImpl.java:48)                   
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)                         
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)                         
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)   
        at java.lang.Thread.run(Thread.java:748)                                                                   
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete                         
        at com.android.tools.r8.utils.t.a(:55)                                                                     
        at com.android.tools.r8.D8.run(:11)                                                                        
        at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:116)             
        ... 34 more                                                                                                
Caused by: com.android.tools.r8.utils.AbortException: Error: null, Cannot fit requested classes in a single dex file (# methods: 81454 > 65536)
        at com.android.tools.r8.utils.Reporter.a(:21)                                                              
        at com.android.tools.r8.utils.Reporter.a(:7)                                                               
        at com.android.tools.r8.dex.VirtualFile.a(:33)                                                             
        at com.android.tools.r8.dex.VirtualFile$h.a(:5)                                                            
        at com.android.tools.r8.dex.ApplicationWriter.a(:13)                                                       
        at com.android.tools.r8.dex.ApplicationWriter.write(:35)                                                   
        at com.android.tools.r8.D8.d(:44)                                                                          
        at com.android.tools.r8.D8.b(:1)                                                                           
        at com.android.tools.r8.utils.t.a(:23)                                                                     
        ... 36 more                                                                                                


FAILURE: Build failed with an exception.                                                                           

* What went wrong:                                                                                                 
Execution failed for task ':app:mergeDexDebug'.                                                                    
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade                  
   > com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:                       
     The number of method references in a .dex file cannot exceed 64K.                                             
     Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html                 

* Try:                                                                                                             
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org                                                                         

BUILD FAILED in 14m 11s                                                                                            
Running Gradle task 'assembleDebug'...                                                                             
Running Gradle task 'assembleDebug'... Done                       860.2s (!)
[!] The shrinker may have failed to optimize the Java bytecode.
    To disable the shrinker, pass the `--no-shrink` flag to this command.
    To learn more, see: https://developer.android.com/studio/build/shrink-code
Gradle task assembleDebug failed with exit code 1

这是我的 pubspec.yaml

name: flash_chat
description: Start your chatting

version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2
  flutter_launcher_icons: ^0.7.4
  animated_text_kit: ^2.0.0
  firebase_core: ^0.4.3+2
  firebase_auth: ^0.15.3+1
  cloud_firestore: ^0.13.0+1

flutter_icons:
  android: true
  ios: true
  image_path: "assets/icon/icon.png"

dev_dependencies:
  flutter_test:
    sdk: flutter


flutter:

  uses-material-design: true
  assets:
    - images/
    - assets/


这是项目级别build.gradle

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是应用级别 build.gradle

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion 28

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.giftbaar.flash_chat.flash_chat"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    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
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

一切都很好,在 iOS 中工作,但只有 Android 会产生问题? 如何解决问题?

更新 minSdkVersion:

发件人:

minSdkVersion 16

以下内容:

minSdkVersion 23

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

要更改最低目标 SDK 版本:

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