Flutter Error: java.lang.NoSuchFieldError PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING

4,668

Solution 1

I believe that this is due to the fact that half of Google's FlutterFire plugins are using old versions of their Android counterparts. As such, I've specified which versions to use in my app level build.gradle. This probably isn't a permanent solution, but seems to have stopped the crashes in the mean time.

In the app level build.gradle, add the following to dependencies:

implementation 'com.google.firebase:firebase-core:16.0.4'
implementation 'com.google.firebase:firebase-analytics:16.0.4'
implementation 'com.google.firebase:firebase-auth:16.0.4'
implementation 'com.google.firebase:firebase-firestore:17.1.1'
implementation 'com.google.firebase:firebase-functions:16.1.1'
implementation 'com.google.firebase:firebase-messaging:17.3.3'
implementation 'com.google.firebase:firebase-storage:16.0.3'

Let me know if this works.

Edit: Only add the implementation lines for the Firebase plugins that you are using. You can find the latest version of each here.

Solution 2

The Beardo's Answer Solves the Issue,

Please Look at my gradle files.

App Level: -

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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion 27

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.adilstore.rakeshproject"
        minSdkVersion 16
        targetSdkVersion 27
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    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 {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
    implementation 'com.google.firebase:firebase-core:16.0.4'
    implementation 'com.google.firebase:firebase-analytics:16.0.4'
    implementation 'com.google.firebase:firebase-auth:16.0.4'
    implementation 'com.google.firebase:firebase-firestore:17.1.1'
    implementation 'com.google.firebase:firebase-functions:16.1.1'
    implementation 'com.google.firebase:firebase-messaging:17.3.3'
    implementation 'com.google.firebase:firebase-storage:16.0.3'
}
apply plugin: 'com.google.gms.google-services'
//com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

And Project Level:-

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral() //add this 
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.google.gms:google-services:3.2.1'
    }
}

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
}
subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "26.1.0"
            }
        }
    }
}
Share:
4,668
DomingoMG
Author by

DomingoMG

Updated on December 07, 2022

Comments

  • DomingoMG
    DomingoMG over 1 year

    I have tried to solve this problem but it keeps giving me the same error.

    I use the following firebase services:

    • Firebase Auth
    • Firebase Database
    • Firebase Storage
    • Firebase Messaging

    I hope to solve this problem, I appreciate any help, thanks.

    Screenshot:

    enter image description here

    Here I show you the console run

    Launching lib\main.dart on Android SDK built for x86 in debug mode...
    [{"event":"app.progress","params":{"appId":"870bf9fe-6ecb-481e-9990-a8f0123d691f","id":"0","progressId":null,"message":"Initializing gradle..."}}]Initializing gradle...
    
    Resolving dependencies...
    Running 'gradlew assembleDebug'...
    registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
    registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
    registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
    registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
    registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
    Built build\app\outputs\apk\debug\app-debug.apk.
    Installing build\app\outputs\apk\app.apk...
    I/flutter (14362): Load es
    Syncing files to device Android SDK built for x86...
    D/        (14362): HostConnection::get() New Host Connection established 0x9ffa3dc0, tid 14398
    D/EGL_emulation(14362): eglMakeCurrent: 0x9fd86c00: ver 3 0 (tinfo 0x9fff1110)
    W/zygote  (14362): Unsupported class loader
    W/zygote  (14362): Skipping duplicate class check due to unsupported classloader
    I/DynamiteModule(14362): Considering local module com.google.android.gms.firebase_database:4 and remote module com.google.android.gms.firebase_database:6
    I/DynamiteModule(14362): Selected remote version of com.google.android.gms.firebase_database, version >= 6
    V/DynamiteModule(14362): Dynamite loader version >= 2, using loadModule2NoCrashUtils
    W/zygote  (14362): Unsupported class loader
    W/zygote  (14362): Skipping duplicate class check due to unsupported classloader
    E/AndroidRuntime(14362): FATAL EXCEPTION: TokenRefresher
    E/AndroidRuntime(14362): Process: com.***********, PID: 14362
    E/AndroidRuntime(14362): java.lang.NoSuchFieldError: No static field PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING of type Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy; in class Lcom/google/android/gms/dynamite/DynamiteModule; or its superclasses (declaration of 'com.google.android.gms.dynamite.DynamiteModule' appears in /data/app/com.*********-Bx6_KiELmKKW1pc-YChs7w==/base.apk)
    E/AndroidRuntime(14362):    at com.google.android.gms.flags.FlagValueProvider.initialize(Unknown Source:7)
    E/AndroidRuntime(14362):    at com.google.android.gms.flags.FlagRegistry.initialize(Unknown Source:4)
    E/AndroidRuntime(14362):    at com.google.firebase.auth.internal.zzx.initialize(Unknown Source:3)
    E/AndroidRuntime(14362):    at com.google.firebase.auth.internal.zzt.run(Unknown Source:14)
    E/AndroidRuntime(14362):    at android.os.Handler.handleCallback(Handler.java:790)
    E/AndroidRuntime(14362):    at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(14362):    at android.os.Looper.loop(Looper.java:164)
    E/AndroidRuntime(14362):    at android.os.HandlerThread.run(HandlerThread.java:65)
    W/DynamiteModule(14362): Local module descriptor class for com.google.firebase.auth not found.
    W/BiChannelGoogleApi(14362): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@d55aa74
    W/DynamiteModule(14362): Local module descriptor class for com.google.firebase.auth not found.
    I/FirebaseAuth(14362): [FirebaseAuth:] Loading module via FirebaseOptions.
    I/FirebaseAuth(14362): [FirebaseAuth:] Preparing to create service connection to gms implementation
    D/EGL_emulation(14362): eglMakeCurrent: 0x9fd86c60: ver 3 0 (tinfo 0x89b36690)
    D/FirebaseAuth(14362): Notifying id token listeners about user ( oi1ngjUXDpWPIBaen7po8T5vE8R2 ).
    D/FirebaseApp(14362): Notifying auth state listeners.
    D/FirebaseApp(14362): Notified 1 auth state listeners.
    D/NetworkSecurityConfig(14362): No Network Security Config specified, using platform default
    I/zygote  (14362): Do partial code cache collection, code=61KB, data=44KB
    I/zygote  (14362): After code cache collection, code=61KB, data=44KB
    I/zygote  (14362): Increasing code cache capacity to 256KB
    D/FlutterNativeView(14362): FlutterView.send called on a detached view, channel=plugins.flutter.io/firebase_database
    I/FirebaseAuth(14362): [FirebaseAuth:] Loading module via FirebaseOptions.
    I/FirebaseAuth(14362): [FirebaseAuth:] Preparing to create service connection to gms implementation
    Lost connection to device.
    

    My Android project and the build.gradle.

    Android -> build.grandle

    buildscript {
        repositories {
            google()
            jcenter()
        }
    
        dependencies {
              classpath 'com.android.tools.build:gradle:3.2.0'
              classpath 'com.google.gms:google-services:4.1.0'
            //classpath 'com.android.tools.build:gradle:3.1.2'
            //classpath 'com.google.gms:google-services:3.2.1' 
        }
    }
    
    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
    }
    
    subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'com.android.support'
                        && !details.requested.name.contains('multidex') ) {
                    details.useVersion "26.1.0"
                }
            }
        }
    }
    

    Android -> App -> src -> build.grandle

    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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
    
    def keystorePropertiesFile = rootProject.file("key.properties")
    def keystoreProperties = new Properties()
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        compileSdkVersion 27
    
        lintOptions {
            disable 'InvalidPackage'
        }
    
        defaultConfig {
            applicationId "com.*************"
            minSdkVersion 16
            targetSdkVersion 27
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    
        signingConfigs {
            release {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
            }
        }
    }
    
    flutter {
        source '../..'
    }
    
    dependencies {
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        implementation 'com.google.firebase:firebase-core:16.0.4'
    }
    apply plugin: 'com.google.gms.google-services'
    



    I updated the versions on Android -> build.gradle. But now it comes out with another error.

    UPDATED:

    Launching lib\main.dart on Android SDK built for x86 in debug mode...
    Initializing gradle...
    Resolving dependencies...
    * Error running Gradle:
    Exit code 1 from: C:\Users\*******\AndroidStudioProjects\**********\*********\android\gradlew.bat app:properties:
    Starting a Gradle Daemon (subsequent builds will be faster)
    
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    A problem occurred configuring root project 'android'.
    > Could not resolve all artifacts for configuration ':classpath'.
       > Could not resolve com.android.tools.build:gradle:3.2.0.
         Required by:
             project :
          > Could not resolve com.android.tools.build:gradle:3.2.0.
             > Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom'.
                > Could not HEAD 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom'.
                   > dl.google.com
       > Could not resolve com.google.gms:google-services:4.1.0.
         Required by:
             project :
          > Could not resolve com.google.gms:google-services:4.1.0.
             > Could not get resource 'https://dl.google.com/dl/android/maven2/com/google/gms/google-services/4.1.0/google-services-4.1.0.pom'.
                > Could not HEAD 'https://dl.google.com/dl/android/maven2/com/google/gms/google-services/4.1.0/google-services-4.1.0.pom'.
                   > dl.google.com
          > Could not resolve com.google.gms:google-services:4.1.0.
             > Could not get resource 'https://jcenter.bintray.com/com/google/gms/google-services/4.1.0/google-services-4.1.0.pom'.
                > Could not HEAD 'https://jcenter.bintray.com/com/google/gms/google-services/4.1.0/google-services-4.1.0.pom'.
                   > Connect to jcenter.bintray.com:443 [jcenter.bintray.com/159.122.18.156] failed: Connection timed out: connect
    
    * 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 54s
    
    Finished with error: Please review your Gradle project setup in the android/ folder.