Biblioteka obsługi projektów systemu Android dla interfejsu API 28 (P) nie działa


106

Skonfigurowałem środowisko Android-P SDK. Kiedy próbuję skorzystać z biblioteki wsparcia projektowania Androida, napotykam błędy kompilacji projektu. Konfiguracje projektu to:

IDE: 3.2 Canary 17 Docelowy interfejs API: 28 Kompilacyjny interfejs 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'
}

A błąd kompilacji nie powiódł się:

Manifest scalenie nie powiodło się: aplikacja atrybutu @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) z [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 jest również obecna w [com.android .support: support -atible: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Sugestia: dodaj 'tools: replace = "android: appComponentFactory"' do elementu w AndroidManifest.xml: 6: 5-40: 19, aby nadpisać.


Czy sprawdziłeś tę odpowiedź: stackoverflow.com/a/54825603/1318946
Pratik Butani

Odpowiedzi:


89

Możesz użyć poprzedniej wersji pakietów interfejsu API artefaktów lub nowego systemu Androidx, nigdy obu.

Jeśli chcesz użyć poprzedniej wersji, zamień swoje zależności na

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

jeśli chcesz korzystać z 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
Ta odpowiedź powinna być akceptowana. Więcej informacji na medium.com/mindorks/…
Rawa

Dlaczego go comnie zastąpi w materialw implementation?
RoCk RoCk

58

Ważna aktualizacja

Android nie zaktualizuje bibliotek obsługi po 28.0.0.

Będzie to ostatnia wersja funkcji dostępna w pakiecie android.support i zachęca się programistów do migracji do systemu AndroidX 1.0.0 .

Skorzystaj więc z biblioteki AndroidX .

  • Nie używaj w projekcie zarówno Support, jak i AndroidX .
  • Twój moduł biblioteki lub zależności mogą nadal mieć biblioteki obsługi. Androidx Jetifier sobie z tym poradzi.
  • Użyj stabilnej wersji androidxlub dowolnej biblioteki, ponieważ alfa, beta, rc mogą zawierać błędy, których nie chcesz wysyłać z aplikacją.

W Twoim przypadku

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

to dziwne, mój projekt był na P od dłuższego czasu, ale zaczął dawać błędy biblioteki wsparcia dzisiaj, kiedy buduję. Czy jest coś, czego tu brakuje?
Talha

To powszechny błąd, z którym wszyscy mamy teraz do czynienia od kilku dni, napotykam go co kilka dni w prowadzonym projekcie. Po prostu unieważnij pamięć podręczną i uruchom ponownie.
Khemraj

@Talha Spróbuj z menu Kompiluj> Wyczyść projekt, a następnie kompiluj> Najpierw utwórz projekt, czasami to wystarcza, jeśli nie, to Unieważnij pamięć podręczną i uruchom ponownie, ponieważ unieważnienie pamięci podręcznej i ponowne uruchomienie zajmuje dużo czasu i czyści pamięć podręczną dla wszystkich projektów.
Jan

43

Dodaj:

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

do aplikacji manifestu

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

mam nadzieję, że to pomoże


Co masz w @string/action_settingsśrodku?
Aliton Oliveira

Miałem problem: znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / androidx.core_core.version
Aliton Oliveira

Błąd po dodaniu 2 wierszy: * 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
Czy dodałeś xmlns: tools = " schemas.android.com/tools " w nagłówku AndroidManifest.xml?
Carlos Santiago

2
Manifest pod android / src / debug / ma podobny nagłówek: <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google wprowadził nowe AndroidX zależności . Musisz przejść na AndroidX, to proste.

Zastąpiłem wszystkie zależności zależnościami AndroidX

Stara zależność projektowa

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

Nowa zależność projektowa AndroidX

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

zależności AndroidX można znaleźć tutaj https://developer.android.com/jetpack/androidx/migrate


Opcja automatycznej migracji do AndroidX (obsługiwana w Android Studio 3.3+)

Przeprowadź migrację istniejącego projektu do systemu AndroidX, wybierając opcję Refaktoryzacja> Migracja do AndroidX z paska menu.


1
wdrożenie „com.google.android.material: material: 1.1.0-alpha05” to jest nowa wersja
Hitesh Tarbundiya

co wpisać zamiast „import android.support.design.widget.TabLayout;” ?
temirbek

6

1.Dodaliśmy te kody do aplikacji / build.gradle:

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

2. Zmodyfikowana wersja SDK i narzędzi do 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2. W pliku AndroidManifest.xml należy dodać dwie linie:

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

Dzięki za odpowiedź @Carlos Santiago: Biblioteka wsparcia projektowania Androida dla API 28 (P) nie działa


To rozwiązanie nie jest zgodne z przyszłymi rozwiązaniami, ponieważ teraz powinieneś używać AndroidX. Stare aplikacje, które zostały opublikowane, należy teraz zaktualizować. Jeśli jest dużo przeróbek, te zmiany powinny zostać wprowadzone.
Abhinav Saxena

@Abhinav Saxena Masz rację, powinniśmy zaktualizować nasz projekt do wersji 28 lepiej niż rozwiązaliśmy ten problem ze starą wersją SDK. :)
Codios

to jest przyjęta odpowiedź. Po wielu sugestiach nic mi nie pomogło, ale pomogło mi to jako configuration.all {}. Uratowałeś mi dzień, dzięki.
Noor Hossain

5

Biblioteka wsparcia projektowania dla androidX to implementation 'com.google.android.material:material:1.0.0'


4

otwórz plik gradle.properties i dodaj do niego te dwie linie:

android.useAndroidX = true
android.enableJetifier = true

wyczyść i zbuduj


1
useAndroidX mówi kompilatorowi do użytkownika androidx. pliki zamiast starego pakietu obsługi Androida
Lena Bru

To powoduje migrację Studio 3.2 i nowszych wersji do AndroidX. Wszystkie biblioteki, które migrowały do ​​AndroidX, powinny zostać poprawione w zależnościach.
Abhinav Saxena

3

Uwaga: nie należy używać w aplikacji zależności com.android.support i com.google.android.material w tym samym czasie.

Dodaj składniki Material Components for Android w pliku build.gradle (app)

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

Jeśli Twoja aplikacja obecnie zależy od oryginalnej biblioteki wsparcia projektowania, możesz skorzystać z opcji Refactor to AndroidX… udostępnianej przez Android Studio. Spowoduje to zaktualizowanie zależności i kodu aplikacji, aby używały nowo spakowanych bibliotek androidx i com.google.android.material.

Jeśli nie chcesz jeszcze przełączać się na nowe pakiety androidx i com.google.android.material, możesz użyć składników materiału za pośrednictwem zależności com.android.support:design:28.0.0-alpha3.


3

Przede wszystkim powinieneś spojrzeć na gradle.properties i te wartości muszą być prawdziwe . Jeśli nie możesz ich zobaczyć, musisz napisać.

android.useAndroidX=true
android.enableJetifier=true

Następnie możesz użyć zależności AndroidX w pliku build.gradle (moduł: aplikacja) . Musisz także sprawdzić compileSDKVersion i targetVersion . Powinny być minimum 28. Na przykład używam 29.

A więc przykład zależności androidx:

implementation 'androidx.cardview:cardview:1.0.0'

Jednak bądź ostrożny, ponieważ wszystko nie zaczyna się od zależności Androidx, jak zależność Cardview . Na przykład stara zależność projektowa to:

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

Ale nowa zależność projektowa to:

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

Musisz więc dokładnie wyszukiwać i czytać. Szczęśliwy kod.

@canerkaseler


2

I przekroczenia tej sytuacji poprzez zastąpienie wszystkich androidx.*do appropiate package name.

zmień swoją linię

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'

do

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'

ODNOTOWANY

  • usuń tools:replace="android:appComponentFactory"z AndroidManifest

0

Poniższy kod działał ze mną idealnie:

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

Dokumentacja systemu Android jest jasna. Przejdź do poniższej strony.Poniżej znajdują się dwie kolumny o nazwach „ARTYFAKT STAREGO BUDOWANIA i „Artefakt kompilacji AndroidX”

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

Teraz masz wiele zależności w gradle, po prostu dopasuj te z artefaktami kompilacji Androidx i zastąp je w gradle.

To nie wystarczy.

Przejdź do MainActivity (powtórz to dla wszystkich działań) i usuń słowo AppCompact Activity w instrukcji „public class MainActivity extends AppCompatActivity” i ponownie napisz to samo słowo. Ale tym razem biblioteka androidx została zaimportowana. Do tej pory plik pomocy appcompact został zaimportowany i używany (również usuń tę instrukcję importu appcompact).

Przejdź również do pliku układu. Załóżmy, że masz układ ograniczeń, wtedy możesz zauważyć, że układ ograniczeń pierwszej linii w pliku xml ma coś związanego z appcompact, więc po prostu go usuń i ponownie napisz Układ ograniczeń, ale teraz zostanie dodany układ ograniczeń związany z androidx.

powtórz to dla tylu działań i tylu plików układu XML.

Ale nie martw się: Android Studio wyświetla wszystkie takie możliwe błędy podczas kompilacji.


0

Miałem podobny problem. Dodano w build.gradle i działało dla mnie.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

jeśli chcesz rozwiązać ten problem bez migracji do AndroidX (nie polecam)

ten problem z łączeniem manifestu jest związany z jedną z zależności używających androidX.

musisz zmniejszyć wersję wydania tej zależności. w moim przypadku:

Używałem Google lub Firebase

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

Muszę zmniejszyć to 15.0.1, aby użyć w bibliotece wsparcia.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.