Как работает Android Support Library?

Насколько мне известно, библиотека поддержки используется, потому что старые устройства не имеют новых API. Например, они не знают, что такое Fragment и как его реализовать. Поэтому эти поведения определяются в библиотеке поддержки.

Итак, мой главный вопрос: каковы различия между библиотекой Fragment в библиотеке поддержки со своим двойником, который представлен в API 11 (Android v3.0, Honeycomb).

Мой второй вопрос: если можно разместить каждый новый API в библиотеке поддержки, почему у нас есть два типа библиотек? Я имею в виду, что Android может выпускать все API только в библиотеке поддержки, а не в библиотеке поддержки и в версии X.xx.

Насколько я понял, библиотеки поддержки могут работать как альтернатива встроенным API, но они не должны быть, потому что они непосредственно влияют на размер приложения.

Например, библиотека поддержки имеет 2 МБ и использует ее функциональные возможности, она принимает все classы, ресурсы и т. Д. (Из 2 МБ), поэтому теперь classes.dex (исполняемый файл Dalvik всех classов, используемых в приложении) моего приложения также включать classы поддержки библиотеки, а также для ресурсов. Итак, если без библиотеки поддержки размер моего приложения был 1 МБ, то теперь с поддержкой библиотеки размер составляет 2 МБ, что означает 3 МБ всего.

Теперь предположим, что эта функция поддержки библиотеки настолько распространена, что на одном устройстве, если у меня есть 10 приложений, то по крайней мере 9 используют эту же библиотеку поддержки, поэтому 9 * 2 = 18 МБ на моем устройстве используется одной и той же библиотекой поддержки, который повторяется в каждом приложении, что плохо, потому что на данный момент 18 МБ может быть не так много, но требуемое пространство может увеличиться, если у вас больше приложений, использующих эту библиотеку поддержки.

Таким образом, лучший вариант – иметь эту библиотеку поддержки 2MB уже в вашей ОС для любого количества приложений вместо того, чтобы иметь ее для каждого приложения. Таким образом, библиотеки поддержки предназначены для использования, когда вам действительно нужны некоторые эффективные функции в вашем приложении для поддержки более старых версий.

Здесь возникает еще один вопрос:

почему эта вспомогательная библиотека не добавляется в ОС в качестве собственного обновления, так что каждое приложение без проблем с размерами может получить доступ к этой функции?

Ответ заключается в том, что может быть много ошибок. Предположим, что у какого-либо пользователя нет установленного обновления (библиотеки поддержки) …

Существует также вероятность того, что в качестве обновления он может работать не так эффективно, как предполагалось, или может вызвать проблемы при интеграции с ОС, поскольку мы уже видели, что каждая ОС (Windows, Linux, Mac) поставляется с новыми версиями, вместо того, чтобы просто давать обновления для жизни для всех новых функций.

Android 4.0.x (ICS) обладает множеством дополнительных функций, по сравнению с Android 2.23.x (Gingerbread). Библиотеки совместимости существуют для устранения некоторых из тех изменений, которые были добавлены в ICS, которые могут поддерживаться Gingerbread. «может быть» ключевой фразой здесь, потому что есть тонна изменений, внесенных в ICS, которые никогда не будут работать с Gingerbread, и, конечно же, они не получат библиотеку совместимости.

Фрагменты, например, которые вы подняли, на самом деле немного отличаются в ICS, чем в библиотеке совместимости, поскольку ICS имеет больше возможностей, которые он может использовать. Если вы посмотрите на код для ICS для classа Fragments, они не такие, как в библиотеке совместимости. Его целый второй набор кода, чтобы сделать что-то «как» Фрагменты в ICS, использоваться в более старой версии, например Gingerbread, без того, чтобы программист заметил большую разницу.

В этом суть библиотек совместимости и причина, по которой они не используются для экстенсивно исправления Gingerbread, чтобы использовать все функции в ICS (они просто не могут). Точка библиотек совместимости заключается в том, чтобы взаимодействовать с вещами, доступными в новых версиях андроида, таких как ICS, проделанным способом ICS в более ранних версиях, таких как GB, по-разному.

Что касается того, почему они не просто поддерживают рост библиотеки поддержки и оставляют одну и ту же базовую ОС – ответ на вопрос о совместимости. Если у пользователя только v4 и v12 нет, что происходит? Android сейчас использует версию ОС Android для ОС в качестве основы для совместимости приложений, и разработчики могут включить библиотеки поддержки (увеличивая размер файла своего приложения, но предоставляя им новые функции). Каждое приложение, которое использует библиотеки поддержки, самостоятельно включает их (что означает 4 приложения = 4 раза в комплекте).

Идея заключается в том, что вы можете загружать только приложения, поддерживаемые текущей версией API вашей операционной системы (в отношении Google Play), и вы можете включить поддержку библиотек поддержки, чтобы поддерживать внешний вид вашего приложения для более старых API-интерфейсов, что еще не имеют функций, которые вы выбрали для этих пользователей для новых API. Это действительно взгляд и чувство внимания больше всего на свете.

Надеюсь, что это прояснит ситуацию 🙂

То, что уже было сказано, это правда. Хотя некоторые детали отсутствуют. Фактически, у меня была возможность посещать сеанс в последнем Google IO, где они специально говорили об этом. Мне было совершенно неожиданно узнать, что библиотека поддержки не содержит код для всех возможных версий API, скорее это адаптация новых функций, которые, по их мнению, достаточно актуальны, чтобы сделать их доступными для старых платформ. Таким образом, он работает, как правило, следующим образом:

  • Предположим, нам нужно использовать новый (ansible от API 16) ConnectivityManager для отслеживания сетевых изменений
  • Мы включаем библиотеки поддержки v4, и мы используем class
  • Способ, которым он работает, заключается в том, что система проверит нашу версию API и запустит встроенный собственный код в случае, если мы находимся в API 16, или запустим код библиотеки поддержки в любом другом случае.

Таким образом, он действует как какой-то маршрутный шлюз. Причиной является то, что обычно более эффективно (и выполнять) использовать последний код, оптимизированный для последней ОС, и последние усовершенствования системы (то есть: аппаратное ускорение).

Тем не менее есть некоторые элементы, которые не были переведены в библиотеку compat, поскольку они находятся в встроенном встроенном коде. Например, fragmentы не предназначались для перезаписи, поскольку они относятся к API13, поскольку они представляют собой огромный компонент, который должен работать в широком диапазоне различных сценариев в системе и устройствах с меньшими возможностями.

В конечном счете и потому, что все это, рекомендуется использовать библиотеки компьютеров, которые известны как хорошая практика, особенно если вы намерены сделать ваши приложения / код доступными для более старых версий (что должно быть идеальным способом)

В библиотеке поддержки фактически нет всего, что содержится в новых API. Он поддерживает части API fragmentов, но он еще не поддерживает ActionBar. Для этого вам нужна другая библиотека, например, ActionBar Sherlock.

Почему существуют две библиотеки?

Поскольку часть проблемы заключалась в том, что Google только что портировал некоторые вещи, но я понимаю, что, кроме того, некоторые из новых функций не могут быть перенесены из-за ограничений основной инфраструктуры ОС и отсутствующих API-интерфейсов в глубине ядра Android Интерфейс пользовательского интерфейса.

Android придумал интересные функции fragmentов и панели действий в последних выпусках.

Теперь, если мы хотим использовать эти функции, а также поддерживать более старую версию Android, тогда нам придется писать очень грязный код, зависящий от версии, что не очень хорошо.

Чтобы избавить нас от всех этих беспорядков, андроид создал библиотеку поддержки, которая не обеспечивает полную поддержку новых функций, но достаточно хороша, чтобы разработчики могли писать аккуратный код, который поддерживается на всех устройствах.

Ответ на ваш второй вопрос очень прост, fragmentы встроены в состав v3.0, и если вы хотите, чтобы приложение запускалось только на v3.0 +, вам действительно не нужно включать внешнюю библиотеку.

Фрагменты из библиотеки поддержки эквивалентны fragmentам Honeycomb +.

Для второго квеста, из документации:

v13 является надмножеством v4 и включает дополнительные classы поддержки для работы с API v13

т.е. тот же самый функциональный, только что адаптированный к API v13.

Я использую модифицированную библиотеку поддержки v4 – с картами.

  • Есть ли причина использовать библиотеку support.v4 в Android?
  • Удалить метки BottomNavigationView
  • Обновление библиотеки поддержки Android до 23.2.0 вызывает ошибку: XmlPullParserException Бинарная строка XML-файла # 17 требует viewportWidth> 0
  • Давайте будем гением компьютера.