Mon application fonctionne bien d'Android 4.3 jusqu'à Android 9 Pie, mais mon application ne fonctionne pas sur Android 10 (Q API 29) et plante. Ceci est mon logcat - pourquoi cela se produit-il?
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' }
et c'est 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
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
9 Réponses :
Vous pouvez changer la version buildTools et la version SDK de 29 à 28
targetSdk = 28 compileSdk = 28 buildTools = '28.0.3'
C'est une solution de contournement, mais à un moment donné, vous voudrez mettre à jour targetSdk
à 29 dans tous les cas, et vous devrez traiter correctement le problème.
Seul targetSdk doit être 28, compileSdk et buildTools peuvent être 29, mais c'est temporairement une solution
Votre problème est définitivement la bibliothèque de calligraphie, j'ai le même problème et il y a 2 façons de le résoudre:
À propos de l'exception:
L'erreur d'exception dans Calligraphy provient de l'utilisation du reflet 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 limitées dans la plate-forme API 29.
Réflexion via Class.getDeclaredField () ou Class.getField () --------> NoSuchFieldException levée
Réflexion via Class.getDeclaredMethod (), Class.getMethod () ----> NoSuchMethodException levée.
Réflexion via Class.getDeclaredFields (), Class.getFields () --------> Les membres non-SDK ne sont pas dans les résultats.
Réflexion via Class.getDeclaredMethods (), Class.getMethods () -> Les membres non-SDK ne sont pas dans les résultats
Selon toute vraisemblance, la dépendance de la calligraphie a été ajoutée dans un projet pour une raison. Pas besoin de l'enlever; la mise à jour vers Calligraphy 3 corrige également le problème d'InflateException: stackoverflow.com/a/57462616/56285
Mettez à jour Calligraphy
vers la dernière version pour résoudre ce problème: Lien: https://github.com/InflationX/Calligraphy/issues/35
Plus précisément, Calligraphy et ViewPump doivent être mis à jour:
implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3'
La migration de Calligraphy 2 vers 3 nécessite quelques modifications de code; voir des exemples dans Calligraphy 3 README .
C'est la bonne réponse. implémentation 'io.github.inflationx: calligraphy3: 3.1.1' implémentation 'io.github.inflationx: viewpump: 2.0.3'
@KonstantinKuznetsov a raison. Le problème dans notre cas: la bibliothèque Calligraphy a beaucoup changé entre la 2.2.0 et la 3.1.1, et il n'est pas trivial de mettre à jour le code de votre application. Par exemple, CalligraphyContextWrapper
n'existe plus dans la version 3.1.1.
Mise à jour: en fait, il est assez simple de mettre à jour vers Calligraphy 3; les extraits de code dans le README le rendent simple. Mais le fait est que, au moins dans notre cas, la mise à jour de Calligraphy n'a pas aidé : obtenir toujours InflateException avec layout/abc_screen_simple
après cela.
@Jonik hmm .. très étrange. Peut-être que certains modules autonomes de votre application ont encore d'anciennes dépendances avec Calligraphy? Avez-vous essayé de vérifier les dépendances transitives dans gradle, vous verrez peut-être quelque chose d'étrange?
@KonstantinKuznetsov: Merci beaucoup! J'ai vérifié :app:dependencies
et j'ai vu que calligraphy3: 3.1.1 dépendait de viewpump: 1.0.0. En effet, dans nos fichiers de construction, nous n'avions qu'une dépendance explicite sur la calligraphie. L'ajout de viewpump: 2.0.3 corrige explicitement ce problème!
J'ai pris la liberté de modifier les informations manquantes dans la réponse.
Cela me sauve la vie.
Lorsque vous êtes confronté à ce problème, mettez simplement à jour la calligraphie et le viewpump de votre application vers la dernière version. Actuellement, la version actuelle est: implementation 'io.github.inflationx: calligraphy3: 3.1.1' implementation 'io.github.inflationx: viewpump: 2.0.3'
si vous utilisez la calligraphie, vous devez donc migrer vers la calligraphie3: https://github.com/InflationX/Calligraphy
implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3'
Migrez de chrisjenx / Calligraphy vers InflationX / Calligraphy et mettez à jour Calligraphy
vers la dernière version
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)); }
Cette solution a été expliquée correctement et a résolu le problème
Vous devez mettre à jour la version de la calligraphie et changer le code en fonction de la nouvelle version
Vous devez modifier le référentiel dans les dépendances de
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
à
ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath(getResources().getString(R.string.bariol)) .setFontAttrId(R.attr.fontPath) .build())) .build());
Vous devez modifier l'utilisation de l'importation depuis
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());
à
implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3'
J'ai utilisé le bariol de police, vous pouvez le changer pour le vôtre.
& newbase vers
implementation "uk.co.chrisjenx:calligraphy:$caligraphyVersion"
Merci beaucoup
Merci beaucoup. C'est complet et bien expliqué!
les réponses ne sont pas vraiment meilleures que cela, merci !!
vous sauvez la vie .Merci
Mettez à jour votre importation de calligraphie dans votre fichier build.gradle (: app) avec ceci ci - dessous
implémentation 'io.github.inflationx: viewpump: 2.0.3'
implémentation 'io.github.inflationx: calligraphy3: 3.1.1'
et utilisez ViewPumpContextWrapper au lieu de CalligraphyContextWrapper
utilisez cette lib com.google.android.material: matériel: 1.0.0-rc01 insted de com.google.android.material: matériel: 1.0.0
@MilanPansuriya ne fonctionne pas
S'il vous plaît, partagez tout votre journal des erreurs ... Habituellement, la vraie raison de ces cas est mentionnée à la fin de la trace de crash
@ W0rmH0le j'ai trouvé un problème, il provenait de la bibliothèque de calligraphie donc je l'ai corrigé en le supprimant
@git, une autre façon plutôt que de supprimer la
Calligraphy
? Je n'ai pas trouvé de solution au problème, mais je trouve cette bibliothèque pratique pour les polices, une idée?Pour moi, cela se produit avec, plus ou moins, la même configuration gradle, mais je ne comprends pas pourquoi cela fonctionne sur les appareils avec Android P mais ne fonctionne pas sur les appareils avec Android Q ...
Mon projet n'utilise pas la calligraphie mais je suis toujours confronté à ce problème exact sur Android 10, quelqu'un est confronté au même problème avec moi? J'ai essayé d'ajouter calligraphy3: 3.1.1 et viewpump: 2.0.3 mais cela arrive toujours.