Android appcompat v7 versions

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.

Проверяем и убеждаемся

Расследование можно считать закрытым. Спасибо за внимание!

Источник

Как добавить библиотеку (android-support-v7-appcompat) в IntelliJ IDEA

Я создал проект, скопировал файлы ресурсов в проект, библиотеку, добавил его в структуру проекта, прописал стиль Theme.AppCompat . Скомпилирован без ошибок, но при запуске исключения вылета:

9 ответов:

Без Gradle В ( Нажмите здесь для решения Gradle)

импортируйте проект библиотеки в Intellij из проекта Eclipse (этот шаг применяется только в том случае, если вы создали свою библиотеку в Eclipse).

щелкните правой кнопкой мыши на модуле и выберите Открыть Настройки модуля.

настройка библиотек V7 jar файл

модуль библиотеки настроек v7

настройка модуля приложения зависимость модуля библиотеки v7

С Помощью Gradle

если вы используете Gradle, вы можете добавить его как compile зависимость.

убедитесь, что у вас есть Android Support Repository установлен пакет SDK. Android Studio автоматически распознает этот репозиторий во время процесса сборки (не уверен в простом IntelliJ).

добавить зависимость к /build.gradle

EDIT: похоже, эти же инструкции находятся на документация под Adding libraries with resources -> Using Android Studio .

прежде всего, вы должны установить библиотеки android в свой локальный репозиторий maven с помощью Maven Android SDK Deployer

затем вы можете добавить зависимость к вашему pom следующим образом:

скопируйте и вставьте $ANDROID_SDK / extras / android / support/v7 / appcompat в корень вашего проекта

откройте » структура проекта «на Intellij, нажмите» модули «на» настройки проекта», затем нажмите»appcompat»->»android», убедитесь, что флажок «модуль библиотеки» установлен.

Читайте также:  Dead space android похожие

нажать «свой-имя_проекта» по «совместимости приложений», отключите «Android-поддержка-В4» и «Android-поддержка-В7-совместимости»; обеспечить флажок перед тем, как» appcompat » проверяется. И, нажмите кнопку «ОК», чтобы закрыть диалог» структура проекта».

вернуться к главному окну, нажмите кнопку «appcompat»->»libs» в верхней левой области проекта. Щелкните правой кнопкой мыши на «android-support-v4″, выберите меню» Добавить как библиотеку», измените» добавить в модуль «на»ваш-проект». То же самое с «android-support-v7-compat».

после выполнения выше, intellij должен быть в состоянии правильно найти android-поддержка-XXXX модули.

еще одно простое решение-вставить эти строки в сборку.gradle file

Источник

Возникают ошибки в 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.

Читайте также:  Лучшие марки смартфонов андроид

Источник

import android support v7 app appcompatactivity

На данный момент в Android Studio создаются проекты на основе библиотеки AppCompat. Если у вас есть старые проекты, то следует мигрировать на новую библиотеку, чтобы использовать новые возможности, такие как ActionBar, материальный дизайн, Toolbar и т.д. для старых устройств.

Прежде всего добавьте зависимость в модуле проекта в файле build.gradle:

Библиотека уже содержит в себе зависимость от библиотеки support-v4, поэтому её прописывать не надо.

Используйте последнюю версию SDK:

В старых проектах вам нужно найти устаревшие или конкурирующие классы и темы, заменив их на нужные значения. В частности, класс Activity нужно заменить на AppCompatActivity:

В старых версиях студии использовались устаревшие шаблоны с использованием фрагментов. Например, использовался класс FragmentActivity. Находим и заменяем.

Компонент ActionBar также существует в двух вариантах. Находим и меням при необходимости.

Диалоговые окна AlertDialog могут поддерживать материальный дизайн. Нужно только выбрать правильный вариант.

В линейке Android 4.x использовалась тема Holo. Для перехода на материальный дизайн, замените android:Theme.Holo.Light на Theme.AppCompat:

В меню также произошли небольшие изменения. Вместо пространства имён android для некоторых свойств используется app:

Если в меню используется SearchView, то проследите за правильным импортом android.support.v7.widget.SearchView вместо android.widget.SearchView.

В коде используется MenuItemCompat:

Что нового

    Поддержка векторных изображений и векторной анимации в Andro >

Нет класса AppCompatActivity в библиотеке android-support-v7-appcompat. Где скачать с классом AppCompatActivity ?

Библиотеку я смотрю в %AndroidSDK%/extras/android/support/v7/appcompat/libs

1 ответ 1

Для того, чтобы добавить поддержку библиотеки AppCompat нужно на этапе создания нового проекта на экране мастера Configure Activity отметить чекбокс Backwards compatibility (AppCompat) — обратная совместимость:

Если по каким то причинам сделать это не удалось, то поддержку библотеки можно добавить позже.

File -> Project Structure или сочетание клавиш CTRL + ALT + SHIFT + S или значок на панели инструментов

Далее, выбираете ваш модуль (цифра 1 на скриншоте), нажимаете вкладку Dependences (цифра 2 на скрине), затем + (плюс) в правом верхнем углу (цифра 3 на скрине) и там в выпадающем списке 1.Library Dependency (цифра 4 на скрине)

появится диалог поиска библиотеки, куда в строку поиска пишем то, что хотим добавить в зависимость (appcompat), после нажимаем Enter на клавиатуре для начала поиска, выделяем нужную библитеку в окне ниже и нажимаем OK, чтобы закрыть диалог и применить изменения, затем OK мастера Project Structure

Пройдет синхронизация и библиотека будет подключена.

Так же можно добавить вручную:

В дереве проекта открываете файл build.gradle модуля проекта и в секцию dependencies пишите зависимость:

где 27.0.2 — версия библиотеки, она обычно соответствует последней актуальной (посмотреть версию можно здесь). В правом верхнем углу появится надпись-ссылка Sync Now, нажимаете на нее для синхронизации проекта

Пытаюсь написать приложение, которое будет считывать значение датчика

оно использует libs/android-support-v7-appcompat.jar

среда Intellige IDEA 2017.3.4 показывает на отсутствие класса android.support.v7.app.ActionBarActivity
при отображении MainActivity

Как решить проблему с добавлением этого класса?

Источник

Оцените статью