Intereting Posts
Как показать пакет Explorer в eclipse? Поля внутри кнопки Создавайте ароматы для разных версий того же класса Почему LayoutInflater игнорирует параметры макета layout_width и layout_height, которые я указал? Найти версию своего приложения для iPhone в AS3 на iOS и Android Android: Как обновить пользовательский интерфейс от AsyncTask, если AsyncTask находится в отдельном классе? Android в алфавитном порядке быстрый просмотр прокрутки в RecyclerView со сворачивающейся панелью инструментов Можем ли мы использовать опции в Android-программировании? Использование ItemizedOverlay и OverlayItem в бета-версии Android 0.9 Ошибка: плагин с id 'com.github.dcendents.android-maven' не найден Robolectric 3.0, не удалось проверить функцию, которая запускает HandlerThread Передача слушателей через Bundle в AlertDialogFragment – возможно ли это? Приложение AOSP Privileged vs System Espresso 2 на Android, промежуточные тесты терпят неудачу после того, как не запущена тестируемая активность, а действия предыдущих тестов все еще живы Невозможно найти совместимый Android SDK для компиляции при запуске `tns platform add android`

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

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

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

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

Solutions Collecting From Web of "Как работает Android Support Library?"

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

Например, библиотека поддержки имеет 2 МБ и использует ее функциональные возможности, она принимает все классы, ресурсы и т. Д. (Из 2 МБ), поэтому теперь classes.dex (исполняемый файл Dalvik всех классов, используемых в приложении) моего приложения также Включают в себя классы поддержки библиотеки, а также для ресурсов. Итак, если без поддержки библиотеки размер моего приложения был 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 для класса Fragments, они не такие, как в библиотеке совместимости. Его целый второй набор кода, чтобы сделать что-то вроде «Фрагментов в ICS», используется в более старой версии, например Gingerbread, без того, чтобы программист заметил большую разницу.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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