Я успешно настроил среду 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.
Найдите, какую новую библиотеку AndroidX вам следует использовать: developer.android.com/jetpack/androidx/migrate/…
Я преодолеваю эту ситуацию, заменяя все 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/…
Почему com не заменили в material в implementation?
Код ниже отлично работал со мной:
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?
У меня возникла проблема: Найдено несколько файлов с независимым от ОС путем '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.
Вы добавили xmlns: tools = "schemas.android.com/tools" в заголовок AndroidManifest.xml?
Я добавил 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.
Манифест в android / src / debug / имеет аналогичный заголовок: <manifest xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools">
вы также должны добавить "xmlns: tools = " schemas.android.com/tools ""
Примечание. Вы не должны использовать зависимости 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 или любую другую библиотеку, потому что альфа, бета, 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 Попробуйте сначала из меню Build> Clear Project, затем Build> Make Project, иногда этого достаточно, если нет, то сделайте недействительный кеш и перезапустите, так как аннулирование кеша и перезапуск занимает много времени и очищает кеш для всех проектов.
Попробуй это:
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 Вы правы, мы должны обновить наш проект до 28 лучше, чем решить эту проблему с помощью старой версии SDK. :)
это принятый ответ. После множества предложений мне ничего не помогло, но это помогло мне как configurations.all {}. Ты спас мне день, спасибо.
открыть файл gradle.properties и добавьте к нему эти две строчки:
android.useAndroidX = true
android.enableJetifier = true
чистить и строить
useAndroidX сообщает компилятору пользователю androidx. файлы вместо старого пакета поддержки Android
Это предписывает Studio 3.2 и выше перейти на AndroidX. Все библиотеки, которые перешли на AndroidX, должны быть исправлены в зависимостях.
Я использовал этот вариант:
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.
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' это новая версия
что поставить вместо import android.support.design.widget.TabLayout; ?
Библиотека поддержки дизайна для 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' у меня работает.
Вы проверили этот ответ: stackoverflow.com/a/54825603/1318946