La bibliothèque de prise en charge de la conception Android pour l'API 28 (P) ne fonctionne pas


106

J'ai configuré avec succès l'environnement du SDK android-P. Lorsque j'essaie d'utiliser la bibliothèque de support de conception Android, je suis confronté à des erreurs de construction de projet. Les configurations de projet sont:

IDE: 3.2 API cible Canary 17: 28 API de compilation: 28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

Et l'erreur d'échec de la construction est:

La fusion du manifeste a échoué: l'attribut application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) de [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 est également présent sur [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Suggestion: ajoutez 'tools: replace = "android: appComponentFactory"' à l'élément d'AndroidManifest.xml: 6: 5-40: 19 pour remplacer.


Avez-vous vérifié cette réponse: stackoverflow.com/a/54825603/1318946
Pratik Butani

Réponses:


89

Vous pouvez utiliser la version précédente des packages d'API des artefacts ou le nouvel Androidx, jamais les deux.

Si vous souhaitez utiliser la version précédente, remplacez vos dépendances par

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

si vous souhaitez utiliser Androidx:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}

2
Cette réponse devrait être celle acceptée. Plus d'infos sur medium.com/mindorks
Rawa

Pourquoi n'a-t-il compas été remplacé materialdans le implementation?
RoCk RoCk

58

Mise à jour importante

Android ne mettra pas à jour les bibliothèques de support après 28.0.0.

Ce sera la dernière version de fonctionnalités sous l'empaquetage android.support, et les développeurs sont encouragés à migrer vers AndroidX 1.0.0 .

Utilisez donc la bibliothèque AndroidX .

  • Ne pas utiliser à la fois support et AndroidX dans le projet.
  • Votre module de bibliothèque ou vos dépendances peuvent toujours avoir des bibliothèques de prise en charge. Androidx Jetifier s'en chargera.
  • Utilisez une version stable de androidxou n'importe quelle bibliothèque, car alpha, beta, rc peuvent avoir des bogues que vous ne voulez pas livrer avec votre application.

Dans ton cas

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

c'est bizarre, mon projet était sur P depuis longtemps, mais il a commencé à donner des erreurs de bibliothèque de support aujourd'hui lorsque je construis. Y a-t-il quelque chose qui me manque ici?
Talha

C'est une erreur commune à laquelle nous sommes tous confrontés maintenant un jour, j'y fais face tous les quelques jours dans le projet en cours. Faites simplement Invalidate cache et redémarrez.
Khemraj

@Talha Essayez à partir du menu Construire> Effacer le projet puis Construire> Créer un projet d'abord, parfois cela suffit, sinon alors faites Invalider le cache et redémarrer, car invalider le cache et redémarrer prend beaucoup de temps et efface le cache pour tous les projets.
John

43

Ajoute ça:

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

à votre application manifeste

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

J'espère que ça aide


Qu'avez-vous dedans @string/action_settings?
Aliton Oliveira

J'ai eu un problème: plus d'un fichier a été trouvé avec le chemin indépendant du système d'exploitation 'META-INF / androidx.core_core.version
Aliton Oliveira

Erreur après l'ajout de 2 lignes: * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363

2
Avez-vous ajouté le xmlns: tools = " schemas.android.com/tools " dans l'en-tête AndroidManifest.xml?
Carlos Santiago

2
Le manifeste sous android / src / debug / a un en-tête similaire:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google a introduit de nouvelles dépendances AndroidX . Vous devez migrer vers AndroidX, c'est simple.

J'ai remplacé toutes les dépendances par des dépendances AndroidX

Ancienne dépendance de conception

implementation 'com.android.support:design:28.0.0'

Nouvelle dépendance de conception AndroidX

implementation 'com.google.android.material:material:1.0.0-rc01'

vous pouvez trouver les dépendances AndroidX ici https://developer.android.com/jetpack/androidx/migrate


Option de migration automatique AndroidX (prise en charge sur Android Studio 3.3+)

Migrez un projet existant pour utiliser AndroidX en sélectionnant Refactor> Migrer vers AndroidX dans la barre de menus.


1
implémentation 'com.google.android.material: matériel: 1.1.0-alpha05' ceci est une nouvelle version
Hitesh Tarbundiya

que mettre à la place de 'import android.support.design.widget.TabLayout;' ?
temirbek

6

1.Ajout de ces codes à votre application / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

2. version SDK et outils modifiée à 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

Dans votre fichier AndroidManifest.xml, vous devez ajouter deux lignes:

<application
    android:name=".YourApplication"
    android:appComponentFactory="anystrings be placeholder"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

Merci pour la réponse @Carlos Santiago: la bibliothèque de support de conception Android pour l'API 28 (P) ne fonctionne pas


Cette solution n'est pas compatible pour l'avenir, car vous devriez utiliser AndroidX maintenant. Les anciennes applications publiées doivent être mises à niveau maintenant. S'il y a beaucoup de retouches, ces modifications doivent encore être apportées.
Abhinav Saxena

@Abhinav Saxena Vous avez raison, nous devrions mettre à jour notre projet à 28 mieux que résoudre ce problème avec l'ancienne version du SDK. :)
Codios

c'est la réponse acceptée, après beaucoup de suggestions, rien ne m'a aidé, mais cela m'a aidé comme configurations.all {}. Vous avez sauvé ma journée, merci.
Noor Hossain

5

La bibliothèque de support de conception pour androidX est implementation 'com.google.android.material:material:1.0.0'


4

ouvrez le fichier gradle.properties et ajoutez-y ces deux lignes:

android.useAndroidX = true
android.enableJetifier = true

nettoyer et construire


1
useAndroidX indique au compilateur l'utilisateur androidx. fichiers au lieu de l'ancien package de support Android
Lena Bru

Cela ordonne à Studio 3.2 et supérieur de migrer vers AndroidX. Toutes les bibliothèques qui ont migré vers AndroidX doivent être corrigées dans les dépendances.
Abhinav Saxena

3

Remarque: vous ne devez pas utiliser les dépendances com.android.support et com.google.android.material dans votre application en même temps.

Ajoutez des composants matériels pour Android dans votre fichier build.gradle (app)

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

Si votre application dépend actuellement de la bibliothèque de support de conception d'origine, vous pouvez utiliser l'option Refactor to AndroidX… fournie par Android Studio. Cela mettra à jour les dépendances et le code de votre application pour utiliser les bibliothèques androidx et com.google.android.material nouvellement intégrées.

Si vous ne souhaitez pas encore basculer vers les nouveaux packages androidx et com.google.android.material, vous pouvez utiliser les composants matériels via la dépendance com.android.support:design:28.0.0-alpha3.


3

Tout d'abord, vous devriez regarder gradle.properties et ces valeurs doivent être vraies . Si vous ne pouvez pas les voir, vous devez écrire.

android.useAndroidX=true
android.enableJetifier=true

Après cela, vous pouvez utiliser les dépendances AndroidX dans votre build.gradle (Module: app) . En outre, vous devez vérifier compileSDKVersion et targetVersion . Ils doivent être au minimum de 28. Par exemple, j'utilise 29.

Donc, un exemple de dépendance androidx:

implementation 'androidx.cardview:cardview:1.0.0'

Attention cependant car tout ne démarre pas avec androidx comme la dépendance cardview . Par exemple, l'ancienne dépendance de conception est:

implementation 'com.android.support:design:27.1.1'

Mais la nouvelle dépendance de conception est:

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

Donc, vous devez rechercher et lire attentivement. Bon code.

@canerkaseler


2

Je traverse cette situation en remplaçant tout androidx.*par appropiate package name.

change ta ligne

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

à

implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

C'EST NOTÉ

  • supprimer tools:replace="android:appComponentFactory"d'AndroidManifest

0

Le code ci-dessous a parfaitement fonctionné avec moi:

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}

0

Essaye ça:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'

0

La documentation Android est claire à ce sujet.Allez à la page ci-dessous.En dessous, il y a deux colonnes avec les noms "OLD BUILD ARTIFACT" et "AndroidX build artifact"

https://developer.android.com/jetpack/androidx/migrate

Maintenant, vous avez de nombreuses dépendances dans gradle, il suffit de faire correspondre celles avec les artefacts de construction Androidx et de les remplacer dans le gradle.

Cela ne suffira pas.

Accédez à votre MainActivity (répétez ceci pour toutes les activités) et supprimez le mot AppCompact Activity dans l'instruction "public class MainActivity extends AppCompatActivity" et écrivez à nouveau le même mot.Mais cette fois, la bibliothèque androidx est importée.Jusqu'à ce que le fichier de support appcompact soit importé et used (également, supprimez cette instruction d'importation appcompact).

Accédez également à votre fichier de mise en page. Supposons que vous ayez une disposition de contrainte, alors vous pouvez remarquer que la disposition de contrainte de première ligne dans le fichier xml a quelque chose lié à appcompact.

répétez ceci pour autant d'activités et autant de fichiers de mise en page xml.

Mais ne vous inquiétez pas: Android Studio affiche toutes ces erreurs possibles lors de la compilation.


0

Avait un problème similaire. Ajouté dans build.gradle et cela a fonctionné pour moi.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

si vous souhaitez résoudre ce problème sans migrer vers AndroidX (je ne le recommande pas)

ce problème de fusion manifeste est lié à l'une de vos dépendances utilisant androidX.

vous devez diminuer la version finale de cette dépendance. pour mon cas:

J'utilisais google ou firebase

api 'com.google.android.gms:play-services-base:17.1.0'

Je dois le diminuer 15.0.1 pour l'utiliser dans la bibliothèque de support.


0

L'ajout androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'fonctionne pour moi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.