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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Надеюсь, что это очистит:)

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

В последних версиях Android появились интересные фрагменты и панель действий.

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

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

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

Ответ 6

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

К второму квесту, из документации:

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

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

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