Android 11 app crash with "The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 12451000 but found 4323000"

3.7k views Asked by At

My app starts crashing on Android 11 devices with the following error message "The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 12451000 but found 4323000". I aware of such issues and I have already define correct value inside the manifest file as follows:

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

If I follow google_play_services_version I can found the expected value

<integer name="google_play_services_version">12451000</integer>

With the help of firebase analytics, I can confirm that it is happening with Android 11 devices only. impacted end user device

From the various SO posts I tried the following things so far:

1- Update all used play service and Firebase dependencies to the latest available version.

2- Used tools: replace with build clean process, in the meta-data tag as follows for both app module as well as for wear module:

<meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"
        tools:replace="android:value" />

3- Check all used 3rd part libs/SDK's manifest files for @integer/google_play_services_version but all are redirecting to the expected value i.e. 12451000.

Following are the build.gradle files: A- build.gradle {:app}-

apply from: '../release-config.gradle'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'android-release-plugin'
apply plugin: 'testfairy'
apply from: '../sonar.gradle'
apply from: '../jacoco.gradle'
// Add the Firebase Crashlytics plugin.
apply plugin: 'com.google.firebase.crashlytics'

android.testOptions {
 unitTests.all {
    jacoco {
        includeNoLocationClasses = true
    }
}
unitTests.returnDefaultValues = true
}
tasks.sonarqube.dependsOn jacocoTestReport


android {
compileSdkVersion 30
buildToolsVersion '29.0.2'
ndkVersion "16.1.4479499"

kapt {
    javacOptions {
        option("-Adagger.gradle.incremental")
        option("-Adagger.formatGeneratedSource=disabled")
    }
}

dexOptions {
    javaMaxHeapSize "4g"
}

defaultConfig {
    applicationId "com.xx”
    minSdkVersion 23
    targetSdkVersion 30
    multiDexEnabled true
    testInstrumentationRunner 
    "androidx.test.runner.AndroidJUnitRunner"

    buildConfigField "String", "SERVER_BASE", ‘”————“’
    buildConfigField "String", "LOCUSLABS_ACCOUNT_ID", ‘”——“’
    buildConfigField "String", "GCM_SENDER_ID", ‘”———“’
    buildConfigField "String", "GRAB_ID", ‘”———“’
    buildConfigField "String", "GCT_CONVERSION_ID", ‘”———“’
    buildConfigField "String", "GCT_LABEL", ‘”———“’
    buildConfigField "String", "GCT_VALUE", ‘”——“’
}

signingConfigs {

}

buildTypes {
    debug {
        versionNameSuffix "(Debuggable)"
        debuggable true
        zipAlignEnabled true
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
        'proguard-rules.pro'
    }
    release {
        shrinkResources true
        signingConfig signingConfigs.release
        zipAlignEnabled true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
      'proguard-rules.pro'
        debuggable false
    }
}

flavorDimensions 'environment'

productFlavors {
    dev {
        applicationIdSuffix ".dev"
        buildConfigField "String", "SERVER_BASE", ‘”——————‘

        def internalVersion = 
         releaseConfig.getAppVersion().internalVersion
        resValue "string", "app_name", "xx (Test) ${internalVersion}"
    }

    stage {
        applicationIdSuffix ".stage"
        buildConfigField "String", "SERVER_BASE", ‘”—————“’—

        def internalVersion = 
        releaseConfig.getAppVersion().internalVersion
        resValue "string", "app_name", "xx (Stage) ${internalVersion}"
    }

    prod {
        buildConfigField "String", "SERVER_BASE", ‘”———“’——
        buildConfigField "String", "LOCUSLABS_ACCOUNT_ID", ‘”———“’
        buildConfigField "String", "GCM_SENDER_ID", ‘”——“’
        buildConfigField "String", "GRAB_ID", ‘”——“’
        buildConfigField "String", "GCT_CONVERSION_ID", ‘”———“’
        buildConfigField "String", "GCT_LABEL", ‘”———“’
    }
}

 packagingOptions {
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/**rxjava.properties**'
}

lintOptions {
    abortOnError false
}

testfairyConfig {
    apiKey “———————“
}

testOptions {
    unitTests.returnDefaultValues = true
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

androidExtensions {
    experimental = true
}
}

def powermock_version = "2.0.2"
def daggerVersion = "2.16"
def leak_canary_version = "2.0-beta-1"

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':common')
implementation('com.facebook.android:facebook-android-sdk:5.15.3') {
    exclude group: 'com.android.support'
}
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation "androidx.constraintlayout:constraintlayout:2.0.2"
implementation "com.google.android.gms:play-services-base:17.4.0"
implementation "com.google.android.gms:play-services-location:17.1.0"
implementation "com.google.android.gms:play-services-maps:17.0.0"
implementation "com.google.android.gms:play-services-vision:20.1.2"
implementation "com.google.android.gms:play-services-wearable:17.0.0"
implementation 'androidx.core:core:1.3.2'
implementation 'com.romandanylyk:pageindicatorview:1.0.3'
implementation 'com.getbase:floatingactionbutton:1.10.1'
implementation 'com.wdullaer:materialdatetimepicker:4.2.3'

// need by grab sdk
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
implementation('com.squareup.retrofit2:retrofit:2.5.0') {
    // exclude Retrofit’s OkHttp peer-dependency module and define 
   your own module import
    exclude module: 'okhttp'
}
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

implementation 'com.google.zxing:core:3.3.3'
implementation 'io.reactivex.rxjava2:rxjava:2.1.10'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.airbnb.android:lottie:2.5.5'
implementation 'me.grantland:autofittextview:0.2.1'


implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'com.github.bumptech.glide:glide:4.11.0'
kapt 'com.github.bumptech.glide:compiler:4.11.0'
implementation 'org.kamranzafar:jtar:2.2'
implementation 'org.tukaani:xz:1.5'
implementation 'io.reactivex:rxjava:1.3.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation(name: 'locuslabs-android-sdk-2.3.10', ext: 'aar') {
    transitive = true
}
 implementation 'com.facebook.soloader:soloader:0.9.0'
implementation 'com.facebook.litho:litho-core:0.38.0'
implementation 'com.facebook.litho:litho-widget:0.38.0'
compileOnly 'com.facebook.litho:litho-annotations:0.38.0'
kapt 'com.facebook.litho:litho-processor:0.38.0'

// Firebase Dependencies
implementation "com.google.firebase:firebase-messaging:20.3.0"
// Add the Firebase Crashlytics SDK.
implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
// Add the Firebase SDK for Google Analytics
implementation 'com.google.firebase:firebase-analytics:17.6.0'
implementation "com.google.firebase:firebase-core:17.5.1"

// Grab Dependencies
implementation(name: 'grab-framework-1.1.33', ext: 'aar')
implementation 'com.braintreepayments.api:braintree:2.16.0'
implementation 'com.android.volley:volley:1.1.1'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
implementation 'de.hdodenhof:circleimageview:2.0.0'
implementation 'org.kamranzafar:jtar:2.2'
implementation group: 'com.googlecode.libphonenumber', name: 
'libphonenumber', version: '8.4.1'
implementation 'io.card:android-sdk:5.5.1'
api 'com.wunderlist:sliding-layer:1.2.5'

// Background Process
implementation 'com.evernote:android-job:1.4.2'

// Dagger
implementation "com.google.dagger:dagger-android:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"

// Paging
implementation 'androidx.paging:paging-runtime:2.1.2'

// Lifecycle
implementation "androidx.lifecycle:lifecycle-runtime:2.2.0"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0"

// Utils
implementation 'com.jakewharton.timber:timber:4.7.1'

//For updating styles attributes dynamically
implementation 'com.airbnb.android:paris:1.7.1'

// A memory leak detection library.
debugImplementation "com.squareup.leakcanary:leakcanary-android:${leak_canary_version}"
implementation "com.squareup.leakcanary:leakcanary-object-watcher-android:${leak_canary_version}"
implementation 'com.intuit.sdp:sdp-android:1.0.6'

wearApp project(':wearable')

//Test
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'

testImplementation "org.powermock:powermock-module-junit4:${powermock_version}"
testImplementation "org.powermock:powermock-module-junit4-rule:${powermock_version}"
testImplementation "org.powermock:powermock-api-mockito2:${powermock_version}"
testImplementation "org.powermock:powermock-classloading-xstream:${powermock_version}"

androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0') {
    exclude group: 'com.google.code.findbugs'
    exclude group: 'com.android.support', module: 'support-annotations'
}

androidTestImplementation('androidx.test:runner:1.3.0') {
    exclude group: 'com.android.support', module: 'support-annotations'
}
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation ("com.github.tomeees:scrollpicker:1.7.4")

 }

 apply plugin: 'com.google.gms.google-services'

B- Top-level build.gradle file:

buildscript {
ext.kotlin_version = '1.3.72'

repositories {       
    maven { url 'https://plugins.gradle.org/m2/' }
    maven { url "http://www.bugsense.com/gradle/" }
    mavenLocal()
    jcenter()
    google()
    }

    dependencies {
    classpath 'com.android.tools.build:gradle:4.0.2'
    classpath 'com.dminc.gradle:android-release-plugin:1.1.0.6'
    classpath 'com.testfairy.plugins.gradle:testfairy:2.0'
    classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2'
    classpath 'com.google.gms:google-services:4.3.4'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }

    }

     allprojects {
     repositories {
     flatDir { dirs 'libs' }
     mavenLocal()
     mavenCentral()
     google()
     }
     }

I am checking for Play service availability from my Splash screen {luncher activity}. I even tried to catch thrown exception by applying try-catch and able to catch it successfully but app still crashing :

I am checking for Play service availability from my Splash screen {luncher activity}. I even tried to catch thrown exception by applying try catch and able to catch it successfully but app still crashing :

    public static int checkPlayServices(Context activity) {
     int retValue;

    try {
        int resultCode = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity);
        Timber.tag(TAG).d(  "This device is supported with api version%s",
                                                            GoogleApiAvailability.getInstance().getClientVersion(activity));

        if (resultCode != ConnectionResult.SUCCESS) {
            if (GoogleApiAvailability.getInstance().isUserResolvableError(resultCode)) {
                retValue = PLAY_STORE_RESOLVABLE_ERROR;
                Timber.tag(TAG).d( "This device is supported but can be resolved.");
            } else {
                Timber.tag(TAG).d(  "This device is not supported and cannot be resolved.");
                retValue = PLAY_STORE_UN_SUPPORT;
            }
        } else {
            retValue = PLAY_STORE_AVAILABLE;
        }
    } catch (java.lang.IllegalStateException e) {
        Timber.tag(TAG).d( "This device Throws Illegal state Exception. Probably caused by google_play_services_version");
        Timber.tag(TAG).e( e.getMessage());
        retValue = PLAY_STORE_VERSION_ERROR;
    } catch (java.lang.Exception e) {
        Timber.tag(TAG).d(  "This device Throws Exception. Exact Reason is unknown");
        Timber.tag(TAG).e(  e.getMessage());
        retValue = PLAY_STORE_ERROR;
    }
    return retValue;
}

I am able to catch but app still got crashes which leads me to another idea that maybe some other SDK dependency is throwing this exception. I check all 3rd SDK's and found that two other SDK's {Facebook and Braintree payments is also checking for Google play service}.

_ I have removed both SDK's but still getting crash.

Note: This crash is happening only on Android 11 devices/emulators for all build versions.

Now I have no option to try. Any leads would be very helpful.

Thanks in advance.

3

There are 3 answers

2
Rustam On BEST ANSWER

YEAH! I found solution. The problem was with library:

implementation "com.google.firebase:firebase-core:17.5.1"

Just replace to

implementation 'com.google.firebase:firebase-core:16.0.3'

Above library loaded the "basement library" and finally we have two "basement" libraries. First was loaded by "play services" library and second loaded by "firebase-core"

For more click below url: The library com.google.android.gms:play-services-basement is being requested by various other libraries at [[15.0.1,15.0.1]], but resolves to 11.8.0

and this

https://github.com/evollu/react-native-fcm/issues/1026

If this answer did not help you then read about gradle and force libraries inside 'com.google.firebase:firebase-core:16.0.3' like below:

implementation ("com.google.firebase:firebase-core:16.0.3") {
        force = true
    }

NOTE: The "force" method was deprecated you must to use new features

3
Sahil On

If you have meta tag in place the answer in most cases would lie in to have a combination of library versions which are compatible and updates of deprecated methods.

You have mentioned following in your build.gradle :

implementation('com.facebook.android:facebook-android-sdk:5.15.3')

One possible reason that I got familiar with on Android 11 with above Facebook SDK version is use of deprecated method activateApp leads to mentioned issue.

Update method AppEventsLogger.activateApp(this); to :

AppEventsLogger.activateApp(getApplication());

Let us know if it worked for you.

1
Rahul Gupta On

Issue has been fixed.

Just change the order of the meta tag. The version tag should always come first.

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/google_api_key"
            tools:replace="android:value" />