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.
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.
It's used in Android to add objects to the manifest, for example if using Google Service one would add it to designate the Google Services version the app binds to. Show activity on this post. Metadata is data that describes other data to inform other applications how to use the data itself.
Android vitals considers crashes excessive when an app: Exhibits at least one crash in at least 1.09% of its daily sessions. Exhibits two or more crashes in at least 0.18% of its daily sessions. A daily session refers to a day in which your app was used.
An app that is written using native-code languages crashes if there’s an unhandled signal, such as SIGSEGV, during its execution. When an app crashes, Android terminates the app's process and displays a dialog to let the user know that the app has stopped, as shown in figure 1.
You can view crash stack traces in Android vitals. The first step to fix a crash is to identify the place where it happens. You can use the stack trace available in the report details if you are using Play Console or the output of the logcat tool.
An app that is written using Java or Kotlin crashes if it throws an unhandled exception, represented by the Throwable class. An app that is written using native-code languages crashes if there’s an unhandled signal, such as SIGSEGV, during its execution.
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" />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With