- Androidx и Support Library
- Полезные ссылки
- Android Support Library: немного о версионности
- Зачем мы это используем
- Как строится нейминг библиотек
- Android X: знакомимся с изменениями в новой библиотеке поддержки
- Авторизуйтесь
- Android X: знакомимся с изменениями в новой библиотеке поддержки
- Пространства имён android.* против androidx.*
- Изменение в именовании пакетов и артефактов Maven
- Строгое версионирование для каждой библиотеки
- Миграция с 28.0.0-alpha1
- Обзор Support Library Android SDK v26
- Поддержка шрифтов в XML
- Скачиваемые шрифты
- Совместимость с эмодзи
- Скачиваемая
- Пакетная
- Эмодзи виджеты
- Автоматический выбор размера TextView
- Степень разбивки
- Задание размеров
- Динамическая анимация
- AnimatedVectorDrawableCompat (бонус)
- Выводы
Androidx и Support Library
При разработке приложений для нескольких версий Android наверняка потребуется способ, который позволит использовать новые функции в более ранних версиях. Можно писать код, который будет обрабатывать ранние версии, а можно воспользоваться библиотекой поддержки (support library), которая обеспечивает обратную совместимость. Помимо этого библиотека поддержки предоставляет удобные классы и функции, которые не только упрощают разработку, но и поддерживаются на большом количестве устройств.
Библиотека поддержки была создана достаточно давно (более 9 лет назад). Всё это время она росла, развивалась и в результате стала немного запутанной, в основном из-за имён компонентов и пакетов. Поэтому Google пересмотрели свой подход и решили разграничить библиотеки, которые идут вместе с операционной системой, от библиотек, которые идут отдельно от неё. Таким образом появилось новое пространство имён — androidx, куда были включены библиотеки, не идущие в комплекте с платформой Android, в том числе подобные библиотеки из библиотеки поддержки, а также из архитектурных компонентов.
AndroidX — это значительное улучшение первоначальной библиотеки поддержки, которая больше не поддерживается (последней версией была 28.0.0).
Полезные ссылки
AndroidX Overview — общая информация об androidx в документации.
Support Library — общая информация о библиотеке поддержки. Она устарела и больше не поддерживается, добавлено ради информации.
AndroidX releases — обновления библиотек androidx.
Hello World, AndroidX — анонс библиотеки androidx в блоге Google.
Перечень пакетов и классов, которые включены в пространсво имён androidx.
Источник
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 X: знакомимся с изменениями в новой библиотеке поддержки
Авторизуйтесь
Android X: знакомимся с изменениями в новой библиотеке поддержки
Google перенесла разработку проекта AndroidX на AOSP. AndroidX — новая библиотека поддержки, которая добавляет новые функции и изменяет некоторые старые. Поговорим об этих изменениях.
Пространства имён android.* против androidx.*
Android-приложения зависят от двух типов классов:
- Классы вроде PackageManager , которые идут в комплекте с операционной системой и могут иметь разные API и поведение на разных версиях Android;
- Классы вроде AppCompatActivity или ViewModel , которые отделены от операционной системы и включаются в ваш apk. Эти библиотеки пишутся для предоставления API, поведение которого будет неизменным на как можно большем количестве версий Android.
Зачастую библиотеки, не идущие в комплекте, будут лучшим выбором, так как они предоставляют API для многих версий Android. Теперь все такие библиотеки, включая оные из Support Library и Architecture Components, будут включены в пространство имён androidx.* , чтобы вы понимали, какие зависимости нужно подключать.
Изменение в именовании пакетов и артефактов Maven
Также была переработана структура пакетов, чтобы поощрить создание небольших, более сфокусированных библиотек, которые уменьшат давление на приложения и тесты, не использующие ProGuard и Multidex. Были обновлены groupId и artifactId Maven, чтобы лучше отражать содержимое библиотеки. Кроме того, теперь к пакетам библиотеки добавляется префикс в виде их groupId , чтобы создать очевидную связь между используемым классом и артефактом Maven, из которого он берётся.
Сейчас вы можете ожидать следующее сопоставление старых пакетов с новыми:
android.support.** → androidx.@
android.databinding.** → androidx.databinding.@
android.design.** → com.google.android.material.@
android.support.test.** → (в будущем релизе) androidx.test.@
Так как библиотеки Architecture Components теперь включены в пакет AndroidX, их имена были упрощены, чтобы отразить их интеграцию с основными библиотеками. Примеры изменений:
android.arch.** → androidx.@
android.arch.persistence.room.** → androidx.room.@
android.arch.persistence.** → androidx.sqlite.@
Кроме того, поскольку в версии 28.0.0-alpha1 Material Components станут заменой Design Library, был обновлён пакет дизайна, чтобы отразить его новое направление.
Для получения полного списка сопоставлений от 28.0.0-alpha1 ( android.support ) к 1.0.0-alpha1 ( androidx ) посетите эту страницу. Учтите, что в течение альфа-стадии в этот список могут быть внесены небольшие изменения.
Строгое версионирование для каждой библиотеки
Начиная с рефакторинга AndroidX, версии библиотек были сброшены с 28.0.0 до 1.0.0. Будущие обновления будут версионироваться отдельно для каждой библиотеки, следуя строгим правилам, согласно которым основная версия будет указывать на бинарную совместимость. Это значит, например, что вы можете добавить и использовать новую функцию в RecyclerView без обновления всех остальных библиотек, используемых вашим приложением. Также это значит, что библиотеки, зависящие от androidx , могут предоставить гарантии приемлемой совместимости с будущими релизами AndroidX — так, зависимость от версии 1.5.0 может работать с версией 1.7.0, но, скорее всего, не будет работать с версией 2.0.0.
Миграция с 28.0.0-alpha1
Переход приложения от зависимостей android.support к зависимостям androidx проходит в два основных этапа: рефакторинг исходного кода и перевод зависимостей.
Рефакторинг исходного кода обновляет Java-код, XML-ресурсы и конфигурацию Gradle таким образом, чтобы ссылаться на отрефакторенные классы и артефакты Maven. Эта функция доступна в Android Studio Canary 14 для приложений, ориентированных на Android P.
17–19 декабря, Онлайн, Беcплатно
Если вы зависите от библиотеки, которая ссылается на более старую версию Support Library, Android Studio обновит эту библиотеку с помощью перевода зависимостей так, чтобы она ссылалась на androidx . Перевод зависимостей автоматически применяется Android Gradle Plugin 3.2.0-alpha14, который переписывает байт-код и ресурсы зависимостей JAR и AAR (а также транзитивных зависимостей) таким образом, чтобы они ссылались на новые androidx классы и артефакты. Также будет доступен отдельный инструмент для перевода в формате JAR.
Источник
Обзор Support Library Android SDK v26
26 версия Android SDK принесла новые возможности в наши Андроид приложения, включая шрифты как ресурсы, загружаемые шрифты, поддержка эмоджи, автоматические размеры TextView, управляемые физикой анимации через Spring and Fling, обратная совместимость для векторных анимаций, и уменьшения библиотеки при помощи повышения минимальной версии sdk до 14.
Если вы не знакомы с Android Support Library, то знайте, что вам нужно компилировать приложение на том же уровне Android API, что и последняя версия Android Support Library. Другими словами, убедитесь, что тег TargetFramework установлен на 8.0 (API 26). В таком случае приложения скомпилируется при помощи последней версии Android Support Library(V26).
Поддержка шрифтов в XML
Теперь вы можете помещать шрифты в новую папку ресурсов шрифта font. Используйте Resources.GetFont или ResourcesCompat.GetFont, чтобы скачать ресурсы шрифта в ваше приложение.
Пример: определение шрифта в XML в папке Resourcesfont:
Использование ресурса шрифта в View:
Скачиваемые шрифты
Есть новый класс FontsContractCompat, который позволит вам запрашивать шрифты у провайдера шрифтов вместо пакетирования их внутри вашего приложения. Вы можете использовать провайдер шрифтов из Google Fonts (800+шрифтов).
Чтобы использовать его, сначала создайте FontRequest:
Во-вторых, вам нужно зарегистрировать FontRequestCallback, который внедряет OnTypefaceRetrieved(Android.Graphics.Typeface typeface) и OnTypefaceRequestFailed(int reason). Мы создали один, который вы можете использовать, в этом примере:
Наконец, вам нужно запросить шрифт:
FontsContractCompat.RequestFont(this, request, callback, GetHandlerThreadHandler());
Вы можете также запросить шрифт непосредственно в XML:
Совместимость с эмодзи
Вспомогательная библиотека EmojiCompat позволит вашим устройствам пользоваться самыми новыми эмодзи, не требуя обновления Android OS. Это помогает избежать изображения надоевших пустых квадратиков (□)!
EmojiCompat имеет две основных библиотеки: скачиваемую или пакетную.
Скачиваемая
Как было отмечено выше в разделе «Скачиваемые шрифты» этого поста, сначала вам нужно сформировать FontRequest, чтобы создать FontRequestEmojiCompatConfig.
Пакетная
Пакетная библиотека делает жизнь немного легче примерно за 7 Мбит пакетного шрифта. Все, что вам нужно, это создать BundledEmojiCompatConfig:
Эмодзи виджеты
Библиотека EmojiCompat обеспечивает нас тремя основными элементами для отображения эмодзи:
EmojiTextView, EmojiEditTExt, и EmojiButton
Автоматический выбор размера TextView
Ваш TextView теперь автоматически увеличивает размер текста, когда увеличивается контейнер. Есть три способа, которыми вы можете задать автоматический выбор размера TextView, и они объяснены ниже.
Начните с описания android:autoSizeTextType как uniform.
Степень разбивки
Вы можете также определить диапазон между минимальным и максимальным размером текста для вашего TextView. Он может также увеличиваться пошагово согласно заданной вами степени разбивки.
Задание размеров
Наконец, вы можете указать все значения, которые TextView может использовать при автоматическом выборе размера. Вы можете указать ресурс массива ранее заданных размеров:
Теперь вам нужно только указать значение android:autoSizePresetSizes для массива, который мы уже создали:
Динамическая анимация
Теперь вы можете использовать анимацию на основе скорости вместо анимации на основе длительности. Такая анимация выглядит более натурально, с движениями, которые имитируют резкое движение или пружину.
Чтобы создать нашу первую динамическую анимацию, создайте новый объект SpringAnimation, используя View, ViewProperty и finalPosition.
SpringAnimation animX = new SpringAnimation(box, DynamicAnimation.TranslationX, 0);
Есть две основных концепции, которые вы можете задать для пружины: Stiffness и DampingRatio.
Stiffness определяет, как быстро пружина возвращается в исходное состояние, а DampingRatio определяет, насколько пружина упругая.
Затем вы можете задать вашу скорость StartVelocity и запустить(Start) анимацию!
AnimatedVectorDrawableCompat (бонус)
Если вы не знаете о AnimatedVectorDrawableCompat, то это красивая стильная библиотека для переходов между путями и интерполяции вдоль пути с целью создания ошеломляющих анимаций, трансформации логотипов и многого другого. Все они теперь привязаны к API 14, который позволяет этим красивым анимационным векторам работать с более старыми устройствами.
Вы можете создать ваши собственные красивые анимации в векторной графике с помощью XML, создав элемент animated-vector и приложив pathInterpolators к определенному objectAnimator. Если вы не лучший аниматор на свете, вы можете начать здесь с помощью инструмента Алекса Локвуда:
Выводы
Есть много хороших характеристик, которые Android предоставляет в пределах своих вспомогательных библиотек, которые вы можете использовать при разработке приложений на Xamarin. Эти характеристики обычно совместимы с предыдущими версиями minSdkVersion, которые определяются вспомогательной библиотекой. Теперь у вас есть шанс исследовать, что вспомогательные библиотеки могут дать вашим приложениям!
Источник