Библиотека поддержки дизайна 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'
}

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

Ошибка слияния манифеста: Атрибут application @appComponentFactory value = (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). Предложение: добавьте 'tools: replace = "android: appComponentFactory"' к элементу в AndroidManifest.xml: 6: 5-40: 19, чтобы переопределить.

Ответ 1

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

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

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

Это будет последний выпуск функции в пакете android.support, и разработчикам рекомендуется перейти на AndroidX 1.0.0.

Так что используйте библиотеку AndroidX.

  • Не использовать как поддержку и AndroidX в проекте.
  • Ваш библиотечный модуль или зависимости все еще могут иметь библиотеки поддержки. Androidx Jetifier справится с этим.
  • Используйте стабильную версию androidx или любую библиотеку, потому что в alpha, beta, 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'
}

Ответ 3

Добавь это:

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

Надеюсь, поможет

Ответ 4

Я использовал эту опцию:

В Android Studio 3.2 и более поздних версиях вы можете быстро перенести существующий проект для использования AndroidX, выбрав "Рефакторинг"> "Перенос в AndroidX" в строке меню.

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

Ответ 5

В моем случае это работает отлично.. Я добавил ниже двух строк кода внутри файла манифеста

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

Manifest file Example

Ответ 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">

Спасибо за ответ @Карлос Сантьяго: библиотека поддержки дизайна Android для API 28 (P) не работает

Ответ 7

откройте файл gradle.properties и добавьте в него две строки:

android.useAndroidX = true
android.enableJetifier = true

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

Ответ 8

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

Ответ 9

Я androidx.* к этой ситуации, заменяя все 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

Ответ 10

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

Ответ 11

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

добавить компоненты материалов для Android

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.

Ответ 12

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

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

Ответ 13

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

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

Ответ 14

Документация по Android ясна на этом. Перейдите на страницу ниже. Под ней есть два столбца с именами "СТАРЫЙ АРТИФАКТ СТРОЙ" и "Артефакт сборки AndroidX"

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

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

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

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

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

Повторите это для столько действий и столько файлов макета XML.

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

Ответ 15

Правильное исправление, как описано в этом ответе.

Вы должны включить jetifier, добавив эти две строки в ваш файл gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Это будет в основном обменивать зависимости библиотеки поддержки Android в зависимости от вашего проекта на AndroidX.

Если gradle.properties не существует, просто создайте файл с именем gradle.properties в корневом проекте и добавьте в него вышеупомянутые строки:

root
|--gradle.properties
|--build.gradle
|--settings.gradle
|--app
|----build.gradle

Ответ 16

Была похожая проблема. Добавил в build.gradle и у меня все заработало.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }