- Android Support Library: немного о версионности
- Зачем мы это используем
- Как строится нейминг библиотек
- не удалось разрешить com.android.support:appcompat-v7:22 и com.android.support:recyclerview-v7:21.1.2
- 17 ответов
- com.android.support:appcompat-v7:28.0.0 conflict & Compile to «Implementation #413
- Comments
- tobimichigan commented Nov 4, 2018
- mohyazji commented Nov 5, 2018 •
- ezet commented Nov 7, 2018
- tobimichigan commented Nov 8, 2018
- tobimichigan commented Nov 10, 2018 •
- Возникают ошибки в com.android.support:appcompat-v7:28.0.0 что делать?
Android Support Library: немного о версионности
Mar 11, 2018 · 4 min read
Существуют такие вещи, о которых обычно не говорят: почему небо голубое, когда мне поднимут зарплату и наша любимая android.support.library. У всех них есть нечто общее: мы встречаемся с ними каждый день, но никогда не интересуемся как они устроены внутри и почему все именно так, как есть — примитивное великолепие.
Зачем мы это используем
При разработке приложений, мы часто хотим видеть одинаковую работу нашего кода на разных версиях устройств. Вместо того, чтобы писать код поддержки для ранних версий Андроид, нам достаточно взять готовую реализацию из Support Library и заняться более важными задачами (таски же должен кто-то закрывать).
Однако т а к было ранее, ведь сейчас, библиотека поддержки это куда больше, чем куча if else с проверкой версионности. Она содержит в себе такие полезные view как:
- RecyclerView — отличная альтернатива устаревшему ListView
- ViewPager — для реализации таб-ориентированной навигации или простого слайдинга
- DrawerLayout — позволяющий быстро и просто добавить боковое меню
- CardView — для разнородного контента
И даже помимо этого, в ней содержатся такие замечательные штуки как линтеры, любезно подсказывающие нам вероятные ошибки, различные утилитные классы типа ContextCompat , аннотации и кучу другого. Их использование значительно упрощает жизнь рядовому разработчику.
Как строится нейминг библиотек
В документации можно видеть список всех доступных для подключения библиотек с их кратким описанием.
Большинство библиотек поддержки имеет префикс, который ПО-СЛУХАМ говорит о минимальной версии андроид, необходимой для её работы.
Помимо упомянутых ранее виджетов, библиотека поддержки предоставляет нам улучшенный GridLayout , библиотеку Palette для работы с цветами, а также Preference Library для реализации экрана настроек (которой никто не пользуется, кек)
Подключаются они все примерно одинаково:
за исключением того, что у библиотек v4 отсутствует префикс)) Добро пожаловать в мир андроид разработки, здесь довольно часто в порядке вещей делать, казалось бы, одну и ту же вещь по разному. Даже гугл не стремается, нам то уж чего.
v4 уже считается довольно устаревшей и по дефолту студия генерирует нам семплы именно с v7 , чего и я советую вам придерживаться.
com.android.support:appcompat-v7 тянет за собой целый ворох различных зависимостей (даже архитектурных. а вы тут всё “какааая архитектура в ондроид”)
С одной этой подключенной библиотекой v7 , проект уже использует примерно 30% от всего доступного места (если считать по количеству методов). Ради справедливости стоит отметить, что здесь подключен и Котлин являющийся де-юро (но пока далеко не де-факто) стандартом разработки под Андроид.
и некоторые из этих библиотек мне не нужны, к примеру фрагменты и все её дочерние 13 зависимостей. Вместо них я использую обычные view (на примере Conductor) и кастомный роутинг (на примере Cicreone). Давайте посмотрим, сколько места нам удасться сэкономить если мы их отключим:
Согласно dex-count наши фрагменты занимают 1740 методов.
Отключаем их простой командой из gradle
пытемся собрать и огосподи BUILD FAILED ! Что же могло пойти не так?
Давайте глянем на логи и разберемся:
Это попросту значит, что в пакете фрагментов, лежит реализация FragmentActivity , которая используется в пакете AppCompatActivity , которую уже используем мы для своих активностей.
В принципе оно и логично, зачем пихать в зависимости то, что нигде не используется. А тут прихожу какой-то я и начинаю все отключать не разобравшись. Ну теперь-то разобрался, надеюсь разобрались и вы.
Помимо этого, была замечена вот какая штука
Обратившись к документации мы видим очень явную и понятную строчку, прочитав которую не было бы этой статьи, отнявшей у вас время:
Note: The minimum SDK version for all support library packages is at least API level 14. Some packages require a higher API level, as noted below.
Т.е. какую бы версию библиотек мы не подключили, минимальный API Level будет = 14 или выше.
А это значит, что префикс в названии библиотек не говорит по сути абсолютно ни о чем, ведь использовать их мы можем лишь с минимальной api = 14.
Проверяем и убеждаемся
Расследование можно считать закрытым. Спасибо за внимание!
Источник
не удалось разрешить com.android.support:appcompat-v7:22 и com.android.support:recyclerview-v7:21.1.2
Я установил ВСЕ Extra и SDK API 21-22, включая измененный compileSdkVersion 22 на 21 buildToolsVersion ’22 .0.1 ‘на 21.1.2, но с ошибкой.
И проблемы рендеринга для API 22, и я все еще изменил его на 58
17 ответов
Это правильная версия, которую вы можете добавить в свой build.gradle в соответствии с потребностями API.
API 24:
API 25:
API 26:
API 27:
Чтобы это заработало, мне пришлось установить:
Compile («com.android.support: дизайн : 22. 2 .0″)
В документации указано иное (docs):
Реальный путь к библиотекам репозитория поддержки:
- Вам следует загрузить библиотеки репозитория поддержки.
Если проблема все еще существует:
Перейдите к реальному пути к вашим библиотекам репозитория поддержки и убедитесь, что существует следующая папка:
В этой папке есть вспомогательные библиотеки, которые невозможно найти. Например:
Откройте папку appcompat-v7 и вы увидите папки со всеми доступными версиями. Вы должны использовать только одну из этих версий в зависимостях файла build.gradle или использовать +, например. 18.0. +
Это путь, взятый из файла зависимостей grade.build:
Обратитесь к настоящему пути на жестком диске ->
Если такой папки нет, вы получите сообщение об ошибке:
p.s. Если у вас Windows x64, при установке sdk и jdk убедитесь, что путь установки не содержит Program Files(86) . Скобки, которые добавляют Windows, могут вызвать дополнительные проблемы с разрешением путей для вашего проекта. Используйте простые пути для вашей установочной папки.
Не удалось найти: com.android.support:appcompat-v7:22.0.0
Ответ «Я буквально все перепробовал»:
Эта проблема также может возникнуть, если у вас нет обновленной библиотеки поддержки Android и репозитория поддержки Android. Просто установите с помощью диспетчера SDK.
Наряду с другими предоставленными решениями убедитесь, что в project / build.gradle есть следующее:
В библиотеках поддержки вам всегда нужно добавлять три числа в качестве номера версии
Предположим, для 22 -> вам нужно записать его как 22.0.0, а не просто 22
Итак, ваши зависимости должны выглядеть так
На языке программистов вам нужно добавить лишние нули.
Надеюсь, это решит вашу проблему
Изменить 22.0.0 на 21.0.3
Возможно, я скачал com.android.support:appcompat-v7:21.0.3 , но у меня нет compile ‘com.android.support:appcompat-v7:22.0.0’
Когда я использую SDK Manager, обновляю свои support library и support repository , проблема закрывается.
ПРИМЕЧАНИЕ1 : все библиотеки com.android.support должны использовать одну и ту же спецификацию версии (смешивание версий может привести к сбоям во время выполнения).
ПРИМЕЧАНИЕ2 . Библиотека поддержки не должна использовать версию, отличную от compileSdkVersion.
Для API 28 вы можете использовать:
В номере версии проще использовать знак « + ». Например
В этом случае вам не придется менять версии для того же номера API.
Зайдите в Messages Gradle Sync и нажмите Install Repository and sync project. Это установит необходимый файл в Android SDK, и после синхронизации вы сможете создать градиент или запустить свой проект.
Вы их импортируете? Как это:
Вставьте приведенный выше код в свое приложение gradle.
И при настройке проекта выберите пустое действие вместо пустого действия.
Исправил мою проблему, изменив эти
Это означает, что ваша целевая версия SDK должна быть такой же, как версия cardView, recyclerView и других библиотек Google.
Выберите все устаревшие пакеты и обновите их.
У меня была такая зависимость в build.gradle —
Но это вызывает нестабильные сборки. Убедитесь, что он работает нормально, и посмотрите в диспетчере Android sdk текущую версию поддерживаемой библиотеки и замените эту зависимость на
Я решил проблему с обновлением всех пакетов из Android SDK Manager, а также мне пришлось установить Extras -> Android Support Repository .
Источник
com.android.support:appcompat-v7:28.0.0 conflict & Compile to «Implementation #413
Comments
tobimichigan commented Nov 4, 2018
Is the bug present in the demo Chat SDK project? Not exactly but complains of com.android.support:appcompat-v7 conflict
What modifications have you made to the Chat SDK? I started a new android project and targeted the newest android build tools version 28.0.0, and complied targeting the newest android sdk. However, there seems to be com.android.support:appcompat-v7: 28.0.0= conflict
Android Version:= 8.1
Steps taken to reproduce the problem: target buildtools 28.0.0
Expected result: conflict in the app build gradle file
Actual result: same as above
Comments: I updated the android repository to 47.0 yet the problem persits
Your build variables says:
MIN_SDK = 16
ANDROID_BUILD_TARGET_SDK_VERSION = 25
ANDROID_COMPILE_SDK_VERSION = 27
ANDROID_SUPPORT_VERSION = 27.1.1
What about the app compact version?
What steps is being taken to change «compile» to «implementation» or «api».
The text was updated successfully, but these errors were encountered:
mohyazji commented Nov 5, 2018 •
you need to update the google play serves
I get the same error on v.4.3.6 and this should be update
In sdk-core :
api ‘com.google.android.gms:play-services-auth:16.0.1’
api ‘com.google.android.gms:play-services-maps:16.0.0’
chat-sdk-ui :
api ‘com.google.android.gms:play-services-places:16.0.0’
ezet commented Nov 7, 2018
You need to update ANDROID_SUPPORT_VERSION = 27.1.1 to 28.x.x if you are using build tools version 28. But in general you should not specify builds tools version explicitly anymore, gradle will determine the correct version to use if you don’t specify it.
tobimichigan commented Nov 8, 2018
@mohyazji , thanks for your response and please my apologies for the delay. You stated, «In sdk-core :
api ‘com.google.android.gms:play-services-auth:16.0.1’
api ‘com.google.android.gms:play-services-maps:16.0.0’
chat-sdk-ui :
api ‘com.google.android.gms:play-services-places:16.0.0′»
I am yet to test this but soon as I do, I will post the result here.
@ezet. thanks for your response too, but you seem to be talking in theory unlike mohyazji who seems to understand what I am talking about better.
I have cloned this chat sdk which seems to be quite interesting to me and I would love to be an active contributor for further development. Bugs can’t be avoided completely but at least should be found and fixed quickly.
I also observe though that «compile» is still being used in the chat sdk which is expiring by the end of 2018. I think we should start looking at this too. I will be in touch.
tobimichigan commented Nov 10, 2018 •
1st Image indicating where the red line is.
2nd image indicating the other two areas where the bug is when targeting build-tools 28.0.0
Ok guys here’s my algorithm for the latest build tools:
- Top level build file:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
task clean(type: Delete) <
delete rootProject.buildDir
>
apply plugin: ‘com.android.application’
android <
signingConfigs <
config <
dependencies <
api fileTree(include: [‘*.jar’], dir: ‘libs’)
api ‘com.android.support.constraint:constraint-layout:1.1.3’
api ‘co.chatsdk.chatsdk:chat-sdk-core:4.3.4’
api ‘co.chatsdk.chatsdk:chat-sdk-ui:4.3.4’
api ‘co.chatsdk.chatsdk:chat-sdk-firebase-file-storage:4.3.4’
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘com.android.support.test 🏃 1.0.1’//Trouble spot, mysterious red underlining
androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.1’
api ‘com.android.support:support-annotations:28.0.0’
api ‘com.android.support:support-v4:28.0.0’
api ‘com.android.support:appcompat-v7:28.0.0’
apply plugin: ‘com.google.gms.google-services’
apply plugin: ‘com.android.library’
apply plugin: ‘org.greenrobot.greendao’
compileSdkVersion 28
defaultConfig <
minSdkVersion 21
targetSdkVersion 28
>
greendao <
schemaVersion 4
targetGenDir «src/main/java»
daoPackage «co.chatsdk.core.dao»
>
// api fileTree(include: [‘*.jar’], dir: ‘libs’)
Источник
Возникают ошибки в com.android.support:appcompat-v7:28.0.0 что делать?
до момента все работало нормально. приложение компилировалось . даже выложил на гугл плей.
что я сделал не так? в builde.gradle подчеркивает красным цветом implementation ‘com.android.support:appcompat-v7:28.0.0‘
при компиляции вылетает ошибка такая:
Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.graphics.drawable.IconCompatParcelizer found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.IResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.IResultReceiver$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver$1 found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver$MyResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.core.graphics.drawable.IconCompatParcelizer found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.core.internal.package-info found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.versionedparcelable.CustomVersionedParcelable found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.NonParcelField found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelField found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelImpl found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelImpl$1 found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelUtils found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel$1 found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel$ParcelException found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelParcel found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream$FieldBuffer found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream$InputBuffer found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelable found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelize found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Go to the documentation to learn how to Fix dependency resolution errors.
Источник