Библиотека поддержки дизайна Android для API 28 (P) не работает

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

IDE: 3.2 Canary 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'
}

И ошибка сборки:

Manifest merger failed : Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 is also present at [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory). Suggestion: add 'tools:replace = "android:appComponentFactory"' to element at AndroidManifest.xml:6:5-40:19 to override.

Вы проверили этот ответ: stackoverflow.com/a/54825603/1318946

Pratik Butani 22.02.2019 12:44

Найдите, какую новую библиотеку AndroidX вам следует использовать: developer.android.com/jetpack/androidx/migrate/…

Blundell 05.10.2020 12:29
113
2
222 992
17

Ответы 17

Я преодолеваю эту ситуацию, заменяя все 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

Вы можете использовать либо предыдущую версию артефактов пакетов 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'
}

Этот ответ должен быть принятым. Подробнее о medium.com/mindorks/…

Rawa 17.08.2018 11:30

Почему com не заменили в material в implementation?

RoCk RoCk 26.11.2018 15:49

Код ниже отлично работал со мной:

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

Добавь это:

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?

Aliton Oliveira 07.06.2019 19:10

У меня возникла проблема: Найдено несколько файлов с независимым от ОС путем 'META-INF / androidx.core_core.version

Aliton Oliveira 07.06.2019 19:46

Ошибка после добавления 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/AndroidMani‌​fest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.

user938363 19.06.2019 04:42

Вы добавили xmlns: tools = "schemas.android.com/tools" в заголовок AndroidManifest.xml?

Carlos Santiago 19.06.2019 11:54

Я добавил xmlns: tools = "schemas.android.com/tools" в AndroidManifest.xml (в android / app) и получил новую ошибку: > Task :app:processDebugManifest FAILED C:\D\code\js\emps_app\android\app\src\debug\AndroidManifest.‌​xml:2:11-50 Error: Attribute manifest@tools value=(http://schemas.android.com/tools) from AndroidManifest.xml:2:11-50 is also present at AndroidManifest.xml:2:11-50 value=(schemas.android.com/tools). Attributes of <manifest> elements are not merged.

user938363 23.06.2019 07:38

Манифест в android / src / debug / имеет аналогичный заголовок: <manifest xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools">

user938363 23.06.2019 07:40

вы также должны добавить "xmlns: tools = " schemas.android.com/tools ""

Ali Ziaee 03.11.2019 20:04

Примечание. Вы не должны использовать зависимости com.android.support и com.google.android.material в своем приложении одновременно.

Добавьте компоненты материалов для Android в файл build.gradle (приложение)

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

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

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

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

Android не будет обновлять библиотеки поддержки после 28.0.0.

This will be the last feature release under the android.support packaging, and developers are encouraged to migrate to 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 15.11.2018 09:44

Это распространенная ошибка, с которой мы все сталкиваемся в настоящее время, я сталкиваюсь с ней каждые несколько дней при запуске проекта. Просто сделайте недействительный кеш и перезапустите.

Khemraj Sharma 15.11.2018 11:39

@Talha Попробуйте сначала из меню Build> Clear Project, затем Build> Make Project, иногда этого достаточно, если нет, то сделайте недействительный кеш и перезапустите, так как аннулирование кеша и перезапуск занимает много времени и очищает кеш для всех проектов.

John 16.04.2019 11:52

Попробуй это:

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

1. Добавьте эти коды в свой app / 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 23.11.2018 07:04

@Abhinav Saxena Вы правы, мы должны обновить наш проект до 28 лучше, чем решить эту проблему с помощью старой версии SDK. :)

Codios 26.11.2018 03:30

это принятый ответ. После множества предложений мне ничего не помогло, но это помогло мне как configurations.all {}. Ты спас мне день, спасибо.

Noor Hossain 27.07.2019 16:25

открыть файл gradle.properties и добавьте к нему эти две строчки:

android.useAndroidX = true
android.enableJetifier = true

чистить и строить

useAndroidX сообщает компилятору пользователю androidx. файлы вместо старого пакета поддержки Android

Lena Bru 18.11.2018 22:49

Это предписывает Studio 3.2 и выше перейти на AndroidX. Все библиотеки, которые перешли на AndroidX, должны быть исправлены в зависимостях.

Abhinav Saxena 23.11.2018 07:00

Я использовал этот вариант:

With Android Studio 3.2 and higher, you can quickly migrate an existing project to use AndroidX by selecting Refactor > Migrate to AndroidX from the menu bar.

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

Google представил новые зависимости AndroidX. Вам нужно перейти на AndroidX, это просто.

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

Old design dependency

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

New AndroidX design dependency

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> Migrate to AndroidX в строке меню.

реализация 'com.google.android.material: material: 1.1.0-alpha05' это новая версия

Hitesh Tarbundiya 09.04.2019 10:45

что поставить вместо import android.support.design.widget.TabLayout; ?

temirbek 20.03.2020 12:44

Библиотека поддержки дизайна для androidX - implementation 'com.google.android.material:material:1.0.0'

Документация Android четко об этом говорит. Перейдите на страницу ниже. Под ней находятся два столбца с именами «СТАРЫЙ АРТЕФАКТ» и «Артефакт сборки AndroidX».

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

Теперь у вас есть много зависимостей в gradle, просто сопоставьте те, которые связаны с артефактами сборки Androidx, и замените их в gradle.

Этого будет недостаточно.

Перейдите в свою MainActivity (повторите это для всех действий) и удалите слово AppCompact Activity в заявлении «общедоступный класс MainActivity расширяет AppCompatActivity» и снова напишите то же слово. Но на этот раз будет импортирована библиотека androidx. До сих пор файл поддержки appcompact был импортирован и used (также удалите этот оператор импорта appcompact).

Также перейдите в свой файл макета. Предположим, у вас есть макет ограничения, тогда вы можете заметить, что макет ограничения первой строки в XML-файле имеет что-то, связанное с appcompact, поэтому просто удалите его и снова напишите макет ограничения. Но теперь добавляется макет ограничения, связанный с androidx.

повторите это для такого количества действий и для такого количества файлов макета xml ..

Но не волнуйтесь: Android Studio отображает все возможные ошибки при компиляции.

Была аналогичная проблема. Добавлен в build.gradle, и у меня это сработало.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

если вы хотите решить эту проблему без перехода на AndroidX (не рекомендую)

эта проблема слияния манифестов связана с одной из ваших зависимостей, использующих androidX.

вам необходимо уменьшить версию выпуска этой зависимости. для моего случая:

Я использовал Google или Firebase

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

Мне нужно уменьшить его до 15.0.1, чтобы использовать в библиотеке поддержки.

Прежде всего, вы должны посмотреть gradle.properties, и эти значения должны быть правда. Если вы не можете их увидеть, вы должны написать.

android.useAndroidX=true
android.enableJetifier=true

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

Итак, пример зависимости androidx:

implementation 'androidx.cardview:cardview:1.0.0'

However be careful because everything is not start with androidx like cardview dependency. For example, old designdependency is:

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

But new designdependency is:

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

RecyclerView is:

implementation 'androidx.recyclerview:recyclerview:1.1.0'

Итак, вам придется искать и внимательно читать. Счастливый код.

Добавление androidTestImplementation 'androidx.test:runner:1.2.0-alpha05' у меня работает.

Другие вопросы по теме