81 votes

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

Mon application fonctionne bien depuis Android 4.3 jusqu'à Android 9 Pie, mais mon application ne fonctionne pas sur Android 10 (Q API 29) et se plante. Voici mon logcat - pourquoi cela se produit-il ?

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

et voici mon 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>

mise à jour

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' }

118voto

Admiral Kunkka Points 892

Mise à jour Calligraphy à la version la plus récente pour résoudre ce problème : Lien : https://github.com/InflationX/Calligraphy/issues/35

Plus précisément, la calligraphie et ViewPump doit être mis à jour :

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

La migration de la Calligraphie 2 vers la 3 nécessite quelques changements de code ; voir les exemples en Calligraphie 3 LISEZMOI .

49voto

Nafees Khabir Points 19

Vous devez mettre à jour la version de la calligraphie et modifier le code en fonction de la nouvelle version.

Vous devez changer le référentiel dans les dépendances de

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

à

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

Vous devez changer l'utilisation de l'importation de

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

à

import io.github.inflationx.calligraphy3.CalligraphyConfig;

Configuration de la calligraphie de

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

à

ViewPump.init(ViewPump.builder()
            .addInterceptor(new CalligraphyInterceptor(
                    new CalligraphyConfig.Builder()

            .setDefaultFontPath(getResources().getString(R.string.bariol))
                            .setFontAttrId(R.attr.fontPath)
                            .build()))
            .build());

J'ai utilisé la police bariol, vous pouvez la changer pour la vôtre.

& newbase à

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

18voto

MEGHA DOBARIYA Points 1
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));
    }

7voto

pablopatarca Points 1

Il est certain que votre problème est la bibliothèque Calligraphy, j'ai eu le même problème et il y a 2 façons de le résoudre :

  1. Revenez à la version cible 28, et attendez une éventuelle mise à jour de la bibliothèque de calligraphie. 2
  2. Retirer la bibliothèque

A propos de l'exception :

L'erreur d'exception dans Calligraphy provient de l'utilisation de la réflexion dans la bibliothèque. Voir la dernière ligne de cette 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 dans votre documentation explique que certaines méthodes de réflexion (interfaces non-SDK) sont restreintes dans la plateforme API 29.

Reflection via Class.getDeclaredField() ou Class.getField() --------> Lancement de NoSuchFieldException

Reflection via Class.getDeclaredMethod(), Class.getMethod() ----> Lancement de NoSuchMethodException.

Reflection via Class.getDeclaredFields(), Class.getFields() --------> Les membres non SDK ne figurent pas dans les résultats.

Reflection via Class.getDeclaredMethods(), Class.getMethods() -> Les membres non SDK ne figurent pas dans les résultats

Source : Restrictions sur les interfaces non-SDK

7voto

sana ebadi Points 740

Si vous utilisez la calligraphie, vous devez migrer vers la calligraphie 3 : https://github.com/InflationX/Calligraphy

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X