Бібліотека підтримки дизайну Android для API 28 (P) не працює


106

Я успішно налаштував середовище Android-P SDK. Коли я намагаюся використовувати бібліотеку підтримки дизайну Android, я стикаюся з помилками побудови проекту. Конфігурації проекту:

IDE: 3.2 Канарський 17 Цільовий API: 28 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'
}

І помилка побудови:

Помилка злиття маніфесту: додаток атрибутів @ appComponentFactory = = (androidx.core.app.CoreComponentFactory) від [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 також присутній у [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Пропозиція: додати в інструмент AndroidManifest.xml: 6: 5-40: 19 додавання 'tools: substitu = = "android: appComponentFactory"' для переопрацювання.


Ви перевірили цю відповідь: stackoverflow.com/a/54825603/1318946
Pratik Butani

Відповіді:


89

Ви можете використовувати попередню версію артефактів або пакетів API або новий Androidx, ніколи і те й інше.

Якщо ви хочете скористатися попередньою версією, замініть свої залежності на

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

якщо ви хочете використовувати 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
Ця відповідь має бути прийнятою. Більше інформації на medium.com/mindorks/…
Рава

Чому це comне замінили materialна implementation?
RoCk RoCk

58

Важливе оновлення

Android не оновлюватиме бібліотеки підтримки після 28.0.0.

Це буде останній випуск функції під упаковкою android.support, і розробникам рекомендується перейти на AndroidX 1.0.0 .

Тому використовуйте бібліотеку AndroidX .

  • Чи не використовувати як підтримку і AndroidX в проекті.
  • У вашому модулі або залежностях бібліотеки все ще можуть бути бібліотеки підтримки. Androidx Jetifier впорається з цим.
  • Використовуйте стабільну версію androidxабо будь-яку бібліотеку, оскільки альфа, бета, rc можуть мати помилки, які ви не хочете відправляти разом із вашим додатком.

У вашому випадку

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

Як це дивно, мій проект був на P дуже давно, але він почав давати помилки бібліотеки підтримки сьогодні, коли я будую. Щось тут мені не вистачає?
Талха

Це звичайна помилка, з якою ми стикаємось усі дні, я стикаюся з нею кожні кілька днів під час запуску проекту. Просто зробіть недійсний кеш і перезапустіть.
Хемрай

@Talha Спробуйте з меню Створити> Очистити проект, потім Створити> Створити проект спочатку, іноді цього достатньо, якщо ні, то зробіть недійсний кеш і перезапуск, оскільки недійсний кеш і перезапуск потребує багато часу і очищає кеш для всіх проектів.
Джон

43

Додати це:

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

до вашої заявки

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

сподіваюся, що це допомагає


Що у вас є @string/action_settings?
Алітон Олівейра

У мене виникла проблема: було знайдено більше одного файлу з незалежним ОС «META-INF / androidx.core_core.version
Алітон Олівейра,

Помилка після додавання 2 рядків: * 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
Ви додали xmlns: tools = " schemas.android.com/tools " у заголовок AndroidManifest.xml?
Карлос Сантьяго

2
Маніфест під android / src / debug / має схожий заголовок:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google представив нові залежності від AndroidX . Вам потрібно перейти на AndroidX, це просто.

Я замінив усі залежності на AndroidX залежності

Стара залежність від дизайну

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

Нова залежність дизайну AndroidX

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

ви можете знайти залежності AndroidX тут https://developer.android.com/jetpack/androidx/migrate


Опція автоматичної міграції AndroidX (підтримується на Android Studio 3.3+)

Перемістіть існуючий проект для використання AndroidX, вибравши Refactor> Перемістити на AndroidX на панелі меню.


1
реалізація 'com.google.android.material: матеріал: 1.1.0-alpha05' це нова версія
Hitesh Tarbundiya

що поставити замість 'імпортувати android.support.design.widget.TabLayout;' ?
temirbek

6

1.Додав ці коди до своєї програми / build.gradle:

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

2. Модифікована версія SDK та інструментів до 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2.У свій файл AndroidManifest.xml слід додати два рядки:

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

Дякуємо за відповідь @Carlos Santiago: Бібліотека підтримки дизайну Android для API 28 (P) не працює


Це рішення не сумісне в майбутньому, як ви повинні використовувати AndroidX зараз. Старі програми, які публікуються, слід оновити зараз. Якщо переробку багато, ці зміни все одно слід внести.
Абхінав Саксена

@Abhinav Saxena Ви маєте рацію, ми повинні оновити наш проект на 28 краще, ніж вирішити цю проблему зі старою версією SDK. :)
Кодіос

це прийнята відповідь, Після безлічі пропозицій мені нічого не допомогло, але це допомогло мені як конфігурації.all {}. Ти врятував мій день, дякую.
Noor


4

відкрийте файл gradle.properties і додайте до нього ці два рядки:

android.useAndroidX = true
android.enableJetifier = true

чистити і будувати


1
useAndroidX повідомляє компілятор користувачеві androidx. файли замість старого пакета підтримки для Android
Lena Bru

Це направляє Studio 3.2 і вище для переходу на AndroidX. Усі бібліотеки, які перейшли на AndroidX, повинні бути виправлені залежно.
Абхінав Саксена

3

Примітка. Не слід одночасно використовувати залежність com.android.support і com.google.android.material у вашому додатку.

Додайте матеріальні компоненти для Android у свій файл build.gradle (app)

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

Якщо ваше додаток зараз залежить від оригінальної бібліотеки підтримки дизайну, ви можете скористатися опцією Refactor to AndroidX…, наданою Android Studio. Це дозволить оновити залежності та код вашого додатка для використання недавно упакованих андроїдських та com.google.android.material бібліотек.

Якщо ви ще не хочете переходити на нові пакети androidx та com.google.android.material, ви можете використовувати Material Components через com.android.support:design:28.0.0-alpha3 залежність.


3

Перш за все, ви повинні виглядати gradle.properties і ці значення повинні бути правдивими . Якщо ви не можете їх побачити, вам доведеться написати.

android.useAndroidX=true
android.enableJetifier=true

Після цього ви можете використовувати залежності AndroidX у своєму build.gradle (Модуль: додаток) . Крім того, ви повинні перевірити compileSDKVersion і targetVersion . Їх має бути мінімум 28. Наприклад, я використовую 29.

Отже, приклад залежності від андроїд:

implementation 'androidx.cardview:cardview:1.0.0'

Однак будьте обережні , тому що все не починається з androidx як cardview залежність . Наприклад, старі дизайнерські залежності :

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

Але нова дизайнерська залежність :

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

Отже, вам потрібно уважно шукати та читати. Щасливий код.

@canerkaseler


2

Я перетинаю цю ситуацію, замінюючи всіх androidx.*на appropiate package name.

змінити лінію

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'

УВАГА

  • видалити tools:replace="android:appComponentFactory"з AndroidManifest

0

Нижче код прекрасно працював зі мною:

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

Документація на Android зрозуміла на цій сторінці. Перейдіть на сторінку нижче. Під ними є дві колонки з назвами "СТАРИЙ БУДІВНИЙ АРТИФАКТ" та "Артефакт побудови AndroidX"

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

Зараз у вас є багато залежностей у gradle.Sust match one with Androidx збирають артефакти і замінюють їх у gradle.

Цього буде недостатньо.

Перейдіть до своєї програми MainActivity (повторіть це для всіх видів діяльності) та видаліть слово AppCompact Activity у виписі "загальнодоступний клас MainActivity розширює AppCompatActivity" і знову напишіть те саме слово. Але цього разу імпортується бібліотека Android для Android. використано (також видаліть заявку про імпорт програми).

Також перейдіть до вашого файлу компонування. Припустимо, у вас є макет обмеження, то ви можете помітити, що макет обмеження першого рядка у файлі xml має щось, що стосується appcompact. Отже, просто видаліть його і напишіть макет обмеження знову.

повторіть це для якомога більше заходів і стільки файлів макета XML ..

Але не хвилюйтеся: Android Studio відображає всі такі можливі помилки під час компіляції.


0

Була аналогічна проблема. Додано в build.gradle, і він працював на мене.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

якщо ви хочете вирішити цю проблему без переходу на AndroidX (я не рекомендую її)

ця проблема явного злиття пов'язана з однією із ваших залежностей за допомогою androidX.

вам потрібно зменшити версію випуску цієї залежності. для мого випадку:

Я використовував google або firebase

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

Я повинен зменшити його на 15.0.1, щоб використовувати його в бібліотеці підтримки.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.