Crash on Android 10 (InflateException in layout/abc_screen_simple line #17)

AndroidAndroidxAndroid 10.0Calligraphy

Android Problem Overview


My application works fine from Android 4.3 until Android 9 Pie, but my application doesn't work on Android 10 (Q API 29) and crashes. This is my logcat - why this is happening?

java.lang.RuntimeException: Unable to start activity 
     ComponentInfo{ir.mahdi.circulars/ir.mahdi.circulars.MainActivity}: 
     android.view.InflateException: Binary XML file line #17 
     in ir.mahdi.circulars:layout/abc_screen_simple: Binary XML file line #17 
     in ir.mahdi.circulars:layout/abc_screen_simple: 
         Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout

and this is my mainActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:layoutDirection="ltr"
    tools:context=".MainActivity">
    
  
</androidx.coordinatorlayout.widget.CoordinatorLayout>

update

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 29
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    } }

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }

Android Solutions


Solution 1 - Android

Update Calligraphy to newest version to solve this problem: Link: https://github.com/InflationX/Calligraphy/issues/35

More specifically, both Calligraphy and ViewPump need to be updated:

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

Migrating from Calligraphy 2 to 3 requires some code changes; see examples in Calligraphy 3 README.

Solution 2 - Android

You need to update calligraphy version and change code according to new version

You need to change repository in dependencies from

implementation "uk.co.chrisjenx:calligraphy:$caligraphyVersion"

to

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

You need to change usage of import from

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

to

import io.github.inflationx.calligraphy3.CalligraphyConfig;

Calligraphy config from

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
               .setDefaultFontPath(getResources().getString(R.string.bariol))
               .setFontAttrId(R.attr.fontPath)
                .build())) 
                .build());

to

ViewPump.init(ViewPump.builder()
            .addInterceptor(new CalligraphyInterceptor(
                    new CalligraphyConfig.Builder()
                            
            .setDefaultFontPath(getResources().getString(R.string.bariol))
                            .setFontAttrId(R.attr.fontPath)
                            .build()))
            .build());

I used font bariol you can change it to yours.

& newbase to

super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));

Solution 3 - Android

Please foloow this below steps.
1> First of all check build.gradle(:app) file
2> If you are using  this below library:
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
3> Update this " implementation 'uk.co.chrisjenx:calligraphy:2.3.0' " library with this below library.
implementation 'io.github.inflationx:viewpump:2.0.3'
implementation 'io.github.inflationx:calligraphy3:3.1.1'
4> In project where You use this below code :
@Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

5> Update it with this below code:

   @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
    }

Solution 4 - Android

Definitively your problem is the Calligraphy library, I've got the same problem and there are 2 ways to solve it:

  1. Go back to target version 28, and wait a possible update of the Calligraphy library. 2
  2. Remove the library

About the exception:

The exception error in Calligraphy comes from the use of the reflection in the library. See the last line of this exception:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 8220
android.view.InflateException: Binary XML file line #17 in com.example:layout/abc_screen_simple: Binary XML file line #17 in com.example/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
Caused by: android.view.InflateException: Binary XML file line #17 in com.example/abc_screen_simple: Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Field.get(java.lang.Object)' on a null object reference

Android in your documentation explain that some reflection methods (non-SDK interfaces) are restricted in the API 29 platform.

> Reflection via Class.getDeclaredField() or Class.getField() --------> NoSuchFieldException thrown > > Reflection via Class.getDeclaredMethod(), Class.getMethod() ----> NoSuchMethodException thrown. > > Reflection via Class.getDeclaredFields(), Class.getFields() --------> Non-SDK members not in results. > > Reflection via Class.getDeclaredMethods(), Class.getMethods() -> Non-SDK members not in results

Source: Restrictions on non-SDK interfaces

Solution 5 - Android

if you are using calligraphy so you should migrate to calligraphy3 : https://github.com/InflationX/Calligraphy

implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

Solution 6 - Android

Migrate from chrisjenx/Calligraphy to InflationX/Calligraphy and update Calligraphy to newest version

Solution 7 - Android

You can change buildTools version and sdk version from 29 to 28

    targetSdk = 28
    compileSdk = 28
    buildTools = '28.0.3'

Solution 8 - Android

This dependency implementation 'com.ice.restring:restring:1.0.0' also causes this crash if targetSdkVersion equals to 29 or higher,

so if you have this dependency (implementation 'com.ice.restring:restring:1.0.0') in your gradle you can solve this problem by removing it or using another lib that work with targetSdkVersion 29

Solution 9 - Android

When faced with this issue, just update the calligraphy and viewpump in your app gradle to the latest version. Presently, the current version is: implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3'

Solution 10 - Android

Update your calligraphy import in your build.gradle(:app) file with this below

implementation 'io.github.inflationx:viewpump:2.0.3'

implementation 'io.github.inflationx:calligraphy3:3.1.1'

and use ViewPumpContextWrapper instead of CalligraphyContextWrapper

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser11453013View Question on Stackoverflow
Solution 1 - AndroidTruong HieuView Answer on Stackoverflow
Solution 2 - AndroidNafees KhabirView Answer on Stackoverflow
Solution 3 - AndroidMEGHA DOBARIYAView Answer on Stackoverflow
Solution 4 - AndroidpablopatarcaView Answer on Stackoverflow
Solution 5 - AndroidSana EbadiView Answer on Stackoverflow
Solution 6 - AndroidRaselView Answer on Stackoverflow
Solution 7 - AndroidKouroshView Answer on Stackoverflow
Solution 8 - Androidelhoucine ayoubView Answer on Stackoverflow
Solution 9 - AndroidPrinceView Answer on Stackoverflow
Solution 10 - AndroidAnilFView Answer on Stackoverflow