Abhishek Kumar
Abhishek Kumar

Reputation: 832

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

I am getting some firebase related errors in my flutter project. It requires androidx support so I created a new project by this command

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

flutter pub get works well then I run my project to Android Emulator and here's my error with flutter run command

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$1$1$1.create(NoIsolationWorkerFactory.java:65)     
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1$1.create(NoIsolationWorkerFactory.java:61)     
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:98)         
        at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.execute(NoIsolationWorkerFactory.java:61)      
        at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)                               
        at org.gradle.workers.internal.AbstractWorker$1.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$1.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$1.execute(NoIsolationWorkerFactory.java:56)        
        at org.gradle.workers.internal.DefaultWorkerExecutor$3.call(DefaultWorkerExecutor.java:215)                
        at org.gradle.workers.internal.DefaultWorkerExecutor$3.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$1.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

And here's my 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/


Here's Project Level 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
}

and here's App Level 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'
}

Everything is fine and working in iOS but only Android create problems? What to do to solve the issue?

Upvotes: 0

Views: 1045

Answers (2)

AL-Khalil Developers
AL-Khalil Developers

Reputation: 13

By default, Flutter supports Android SDK v16 (Jelly Bean, released 2012), but multidex doesn't really work with Jelly Bean (though, it's possible). Configuring Jelly Bean to work is beyond the scope of this codelab, so we'll change the minimum target SDK version from v16 to v21 (Lollipop, released 2014).

To change the minimum target SDK version:

Open android/app/build.gradle, then find the line that says minSdkVersion 16. Change that line to minSdkVersion 21. Save the file.

Upvotes: 1

Peter Haddad
Peter Haddad

Reputation: 80904

Update the minSdkVersion:

From:

minSdkVersion 16

to the following:

minSdkVersion 23

Upvotes: 1

Related Questions