27
votes

Après la migration vers AndroidX, erreur de gonflage de la classe android.support.design.widget.AppBarLayout

Après avoir utilisé Android Studio pour migrer mon projet vers AndroidX (et avoir AndroidX manuellement de nombreuses erreurs d'importation), je n'obtiens aucune erreur de compilation, mais lorsque l'application démarre, j'obtiens un plantage avec:

Error inflating class android.support.design.widget.AppBarLayout .

La ligne incriminée dans le fichier de mise en page est: <android.support.design.widget.AppBarLayout

Mes dépendances dans build.gradle sont:

dependencies {
    def lifecycle_version = '2.1.0-alpha02'
    // used below--will be different for androidx (migrated 2019-02-04)
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'

    implementation 'com.google.android.material:material:1.1.0-alpha03'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.okio:okio:1.15.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
    implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0'
    // Relay class
    implementation 'com.jakewharton.rx2:replaying-share:2.1.0'
    // ReplayingShare
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0'
    // RxBinding
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"  // see def above
    // includes ViewModel and LiveData
    implementation 'org.apache.commons:commons-lang3:3.8.1'
    // for tuples like Triple
    implementation 'com.androidplot:androidplot-core:1.5.6'
    // AndroidPlot
}

Je suppose qu'il me manque quelque chose mais je ne trouve pas ce que c'est.


1 commentaires

Trouvez android.support.design.widget.AppBarLayout et remplacez-le par com.google.android.material.appbar.AppBarLayout au niveau de l'application (y compris les fichiers de mise en page des ressources.) Et puis une version propre!


5 Réponses :


6
votes

Selon les migrations AndroidX docs , le androidx remplacement pour AppBarLayout est com.google.android.material.appbar.AppBarLayout . Essayez de remplacer votre balise AppBarLayout par ceci.

Quant à savoir pourquoi la compilation / la construction fonctionne, je suppose que c'est quelque chose à voir avec Jetifier, mais je ne suis pas certain.


0 commentaires

61
votes

Vous devez utiliser com.google.android.material.appbar.AppBarLayout .

La version 1.0.0 est déjà implementation 'androidx.appcompat:appcompat:1.0.0' pouvez donc utiliser l' implementation 'androidx.appcompat:appcompat:1.0.0'

Ajouter l' implementation 'com.google.android.material:material:1.0.0' dépendance implementation 'com.google.android.material:material:1.0.0'

Voir Intégration des composants matériels pour la dernière version. Et utilise

<com.google.android.material.appbar.AppBarLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

</com.google.android.material.appbar.AppBarLayout>

Pour d'autres artefacts et mappage de classes, consultez le document de migration AndroidX .


6 commentaires

Eh bien, cette erreur a disparu, maintenant je reçois celle-ci: Error inflating class android.support.v7.widget.Toolbar


Remplacez-le par androidx.appcompat.widget.Toolbar .


Maintenant, Error inflating class androidx.constraintlayout.ConstraintLayout même si j'ai ceci dans les dépendances: implementation 'androidx.constraintlayout:constraintlayout:1.1.3'


ConstraintLayout n'a jamais fait partie de la v7 une bibliothèque distincte. Utilisez l' implementation 'androidx.constraintlayout:constraintlayout:1.1.2' .. Lisez le lien ci-dessus dans la réponse de Ben.


Comme vous pouvez le voir ci-dessus, c'est exactement ce que j'ai, sauf pour la version mineure.


Son androidx.constraintlayout.widget.ConstraintLayout non androidx.constraintlayout.ConstraintLayout . Utilisez simplement Auto complete intellisense pour utiliser le bon package en xml.



25
votes

Veuillez parcourir ces anciens et nouveaux mappages de classes

par exemple; - Utilisez com.google.android.material.appbar.AppBarLayout au lieu de android.support.design.widget.AppBarLayout

Pour AppBarLayout

entrez la description de l'image ici

Pour la barre d'outils

entrez la description de l'image ici


1 commentaires

Belle explication



8
votes

La classe de gonflage Androidx <android.support.design.widget.TabLayout/> ne fonctionnera pas, elle n'existe pas, alors remplacez-la par <com.google.android.material.tabs.TabLayout/> cela fonctionnera bien et n'oubliez pas d'ajouter

implementation 'com.google.android.material:material:1.1.0-alpha07'

à vos dépendances


0 commentaires

0
votes

si vous utilisez Kotlin DSL, vous devez l'ajouter à build.gradle.kts

 implementation("com.google.android.material:material:1.1.0")
 implementation("androidx.appcompat:appcompat:1.1.0")

et dans votre mise en page, utilisez <com.google.android.material.appbar.AppBarLayout/>


0 commentaires