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