Die Android Design Support Library für API 28 (P) funktioniert nicht


106

Ich habe die Android-P SDK-Umgebung erfolgreich konfiguriert. Wenn ich versuche, die Android Design Support Library zu verwenden, treten Fehler beim Erstellen von Projekten auf. Projektkonfigurationen sind:

IDE: 3.2 Canary 17 Ziel-API: 28 Kompilierungs-API: 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'
}

Und Build fehlgeschlagen Fehler ist:

Manifest-Fusion fehlgeschlagen: Attribut application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) von [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 ist auch unter [com.android vorhanden .support: support-compatible: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Vorschlag: Fügen Sie 'tools: replace = "android: appComponentFactory"' zum Element unter AndroidManifest.xml hinzu: 6: 5-40: 19, um es zu überschreiben.


Haben Sie diese Antwort überprüft: stackoverflow.com/a/54825603/1318946
Pratik Butani

Antworten:


88

Sie können entweder die vorherige API-Paketversion von Artefakten oder das neue Androidx verwenden, niemals beides.

Wenn Sie die vorherige Version verwenden möchten, ersetzen Sie Ihre Abhängigkeiten durch

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

Wenn Sie Androidx verwenden möchten:

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
Diese Antwort sollte akzeptiert werden. Weitere Informationen unter medium.com/mindorks/…
Rawa

Warum comwurde das nicht materialin der ersetzt implementation?
RoCk RoCk

58

Wichtiges Update

Android aktualisiert die Support-Bibliotheken danach nicht mehr 28.0.0.

Dies ist die letzte Feature-Version unter der android.support-Verpackung. Entwickler werden aufgefordert, auf AndroidX 1.0.0 zu migrieren .

Verwenden Sie also die Bibliothek AndroidX .

  • Verwenden Sie im Projekt nicht sowohl Support als auch AndroidX .
  • Ihr Bibliotheksmodul oder Ihre Abhängigkeiten können weiterhin Unterstützungsbibliotheken enthalten. Androidx Jetifier wird damit umgehen.
  • Verwenden Sie eine stabile Version androidxoder eine beliebige Bibliothek, da Alpha, Beta, RC Fehler enthalten können, die Sie nicht mit Ihrer App versenden möchten.

In deinem Fall

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

Es ist seltsam, mein Projekt war lange Zeit auf P, aber es gab heute beim Erstellen Fehler in der Support-Bibliothek. Fehlt mir hier etwas?
Talha

Es ist ein häufiger Fehler, mit dem wir alle seit Tagen konfrontiert sind. Ich sehe ihn alle paar Tage beim Ausführen eines Projekts. Führen Sie einfach den Cache ungültig aus und starten Sie ihn neu.
Khemraj

@Talha Versuchen Sie es zuerst über das Menü Erstellen> Projekt löschen, dann Erstellen> Projekt erstellen. Manchmal reicht dies aus. Wenn nicht, führen Sie den Cache ungültig und starten Sie ihn neu, da der ungültige Cache und der Neustart viel Zeit in Anspruch nehmen und den Cache für alle Projekte löschen.
John

43

Füge das hinzu:

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

zu Ihrer Manifest-Anwendung

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

ich hoffe es hilft


Was hast du @string/action_settingsdrin
Aliton Oliveira

Ich hatte ein Problem: Es wurde mehr als eine Datei mit dem vom Betriebssystem unabhängigen Pfad 'META-INF / androidx.core_core.version
Aliton Oliveira

Fehler nach dem Hinzufügen von 2 Zeilen: * 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
Haben Sie die xmlns: tools = " schemas.android.com/tools " im AndroidManifest.xml-Header hinzugefügt?
Carlos Santiago

2
Das Manifest unter Android / src / debug / hat einen ähnlichen Header:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google hat neue AndroidX- Abhängigkeiten eingeführt. Sie müssen auf AndroidX migrieren, es ist einfach.

Ich habe alle Abhängigkeiten durch AndroidX-Abhängigkeiten ersetzt

Alte Designabhängigkeit

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

Neue AndroidX-Designabhängigkeit

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

Sie finden AndroidX-Abhängigkeiten hier https://developer.android.com/jetpack/androidx/migrate


Automatische AndroidX-Migrationsoption (unterstützt von Android Studio 3.3+)

Migrieren Sie ein vorhandenes Projekt zur Verwendung von AndroidX, indem Sie in der Menüleiste Refactor> Zu AndroidX migrieren auswählen.


1
Implementierung 'com.google.android.material: material: 1.1.0-alpha05' Dies ist eine neue Version
Hitesh Tarbundiya

was anstelle von 'android.support.design.widget.TabLayout importieren'; ?
Temirbek

6

1.Fügen Sie diese Codes zu Ihrer App / build.gradle hinzu:

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

2.Modifizierte SDK- und Tools-Version auf 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2.In Ihrer AndroidManifest.xml-Datei sollten Sie zwei Zeilen hinzufügen:

<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">

Vielen Dank für die Antwort @Carlos Santiago: Android Design Support Library für API 28 (P) funktioniert nicht


Diese Lösung ist nicht zukunftsfähig, da Sie jetzt AndroidX verwenden sollten. Veröffentlichte alte Anwendungen sollten jetzt aktualisiert werden. Wenn es viele Nacharbeiten gibt, sollten diese Änderungen noch vorgenommen werden.
Abhinav Saxena

@Abhinav Saxena Sie haben Recht, wir sollten unser Projekt besser auf 28 aktualisieren, als dieses Problem mit der alten SDK-Version zu lösen. :)
Codios

Dies ist die akzeptierte Antwort. Nach vielen Vorschlägen hat mir nichts geholfen, aber dies hat mir als Konfigurationen geholfen. all {}. Du hast meinen Tag gerettet, danke.
Noor Hossain

5

Design Support Library für AndroidX ist implementation 'com.google.android.material:material:1.0.0'


4

Öffnen Sie die Datei gradle.properties und fügen Sie diese beiden Zeilen hinzu:

android.useAndroidX = true
android.enableJetifier = true

reinigen und bauen


1
useAndroidX weist den Compiler an, androidx zu verwenden. Dateien anstelle des alten Android-Support-Pakets
Lena Bru

Dadurch wird Studio 3.2 und höher angewiesen, auf AndroidX zu migrieren. Alle Bibliotheken, die auf AndroidX migriert wurden, werden in Abhängigkeiten korrigiert.
Abhinav Saxena

3

Hinweis: Sie sollten die Abhängigkeiten com.android.support und com.google.android.material nicht gleichzeitig in Ihrer App verwenden.

Fügen Sie Ihrer build.gradle (App) -Datei Materialkomponenten für Android hinzu

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

Wenn Ihre App derzeit von der ursprünglichen Design Support Library abhängt, können Sie die von Android Studio bereitgestellte Option Refactor to AndroidX… verwenden. Dadurch werden die Abhängigkeiten und der Code Ihrer App aktualisiert, um die neu gepackten Bibliotheken androidx und com.google.android.material zu verwenden.

Wenn Sie noch nicht auf die neuen Pakete androidx und com.google.android.material umsteigen möchten, können Sie Material Components über die Abhängigkeit com.android.support:design:28.0.0-alpha3 verwenden.


3

Zunächst sollten Sie gradle.properties betrachten und diese Werte müssen wahr sein . Wenn Sie sie nicht sehen können, müssen Sie schreiben.

android.useAndroidX=true
android.enableJetifier=true

Danach können Sie AndroidX-Abhängigkeiten in Ihrem build.gradle (Modul: App) verwenden . Außerdem müssen Sie compileSDKVersion und targetVersion überprüfen . Sie sollten mindestens 28 sein. Zum Beispiel verwende ich 29.

Ein Beispiel für eine Androidx-Abhängigkeit:

implementation 'androidx.cardview:cardview:1.0.0'

Seien Sie jedoch vorsichtig, da nicht alles mit AndroidX wie der Abhängigkeit von der Kartenansicht beginnt . Zum Beispiel alte Design Abhängigkeit ist:

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

Aber neue Design Abhängigkeit ist:

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

Sie müssen also sorgfältig suchen und lesen. Glücklicher Code.

@canerkaseler


2

Ich überquere diese Situation durch alle ersetzen androidx.*zu appropiate package name.

ändere deine Linie

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'

zu

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'

NOTED

  • tools:replace="android:appComponentFactory"aus AndroidManifest entfernen

0

Der folgende Code hat bei mir perfekt funktioniert:

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

Versuche dies:

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

0

Die Android-Dokumentation ist hierüber klar. Gehen Sie zur folgenden Seite. Darunter befinden sich zwei Spalten mit den Namen "OLD BUILD ARTIFACT" und "AndroidX Build Artefakt".

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

Jetzt haben Sie viele Abhängigkeiten in gradle. Passen Sie diese einfach an Androidx-Build-Artefakte an und ersetzen Sie sie im gradle.

Das wird nicht reichen.

Gehen Sie zu Ihrer MainActivity (wiederholen Sie dies für alle Aktivitäten) und entfernen Sie das Wort AppCompact Activity in der Anweisung "public class MainActivity erweitert AppCompatActivity" und schreiben Sie dasselbe Wort erneut. Diesmal wird jedoch die androidx-Bibliothek importiert. Bis jetzt wurde die appcompact-Unterstützungsdatei importiert und verwendet (entfernen Sie auch diese appcompact-Importanweisung).

Gehen Sie auch zu Ihrer Layoutdatei. Angenommen, Sie haben ein Einschränkungslayout, dann können Sie feststellen, dass das Einschränkungslayout für die erste Zeile in der XML-Datei etwas mit appcompact zu tun hat. Löschen Sie es einfach und schreiben Sie das Einschränkungslayout erneut. Jetzt wird jedoch das Androidx-bezogene Einschränkungslayout hinzugefügt.

Wiederholen Sie dies für so viele Aktivitäten und so viele XML-Layoutdateien.

Aber keine Sorge: Android Studio zeigt beim Kompilieren alle möglichen Fehler an.


0

Hatte ein ähnliches Problem. In build.gradle hinzugefügt und es hat bei mir funktioniert.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

Wenn Sie dieses Problem lösen möchten, ohne auf AndroidX zu migrieren (ich empfehle es nicht)

Dieses offensichtliche Fusionsproblem hängt mit einer Ihrer Abhängigkeiten bei der Verwendung von androidX zusammen.

Sie müssen die Release-Version dieser Abhängigkeit verringern. für meinen Fall:

Ich habe Google oder Firebase verwendet

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

Ich muss es auf 15.0.1 reduzieren, um es in der Support-Bibliothek zu verwenden.


0

Hinzufügen androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'funktioniert für mich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.