Skip to content

Полный документ интеграции дифференциального обновления Android-приложения (основан на UpgradeLink + DiffUpdater)

I. Основная концепция дифференциального обновления

Дифференциальное обновление (также известное как инкрементное обновление) — это эффективное решение для обновления приложений. Его основная логика заключается в том, что при обновлении приложения загружается только разностная часть (обычно называемая "пакетом патча") между текущей версией и целевой версией, а не полный установочный пакет целевой версии (APK-пакет).

По сравнению с традиционным полным обновлением, основные преимущества дифференциального обновления заключаются в следующем:

  1. Сокращение потребления данных: Размер пакета патча составляет только 10-30% от полного APK (в зависимости от разницы между версиями), что значительно снижает расход сетевых данных для пользователей во время обновлений;
  2. Улучшение эффективности обновления: Меньшие пакеты патча загружаются быстрее, особенно сокращая время ожидания обновления в условиях слабой сети;
  3. Снижение нагрузки на сервер: Серверы只需 распространять небольшие пакеты патча, снижая использование пропускной способности и накладные расходы на хранение.

Его основная принципы заключаются в сравнении двоичных данных старых и новых APK-файлов с помощью специальных алгоритмов (например, BSDiff, HDiffPatch и др.), извлечении разностного содержимого для генерации пакета патча. После загрузки пакета патча клиентом он объединяется с локальным старым APK для генерации полного APK целевой версии, и в конце концов завершается установка и обновление.

II. Введение в основные системы

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

Основные функции:

  1. Управление версиями: Поддерживает поддержку информации о исторических версиях и целевых версиях приложения, а также записи адресов хранения APK-пакетов и пакетов патча для каждой версии;
  2. Конфигурация правил обновления: Позволяет устанавливать правила, такие как принудительное обновление/опциональное обновление, обновление по каналам и ограничения диапазона версий;
  3. Генерация и хранение пакетов патча: Интегрируется с дифференциальными алгоритмами для автоматической генерации и хранения пакетов патча на основе APK старых и новых версий, предоставляя стабильные ссылки для скачивания;
  4. Проверка статуса обновления: Принимает запросы на проверку версии от клиентов и возвращает основные данные, такие как информация о целевой версии, адрес пакета патча и правила обновления;
  5. Поддержка совместимости: Адаптируется к устройствам с разными версиями системы Android и архитектурами для обеспечения универсальности процесса обновления.

Основная ценность:

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

(II) DiffUpdater: Android SDK для дифференциального обновления

DiffUpdater — это лёгкий набор инструментов для разработки дифференциальных обновлений, специально разработанный для Android-приложений. Он отвечает за выполнение конкретных операций, таких как загрузка пакета патча, объединение и установка на стороне клиента, отличаясь простотой использования и настраиваемостью.

Основные функции:

  1. Обработка пакетов патча: Поддерживает основные дифференциальные алгоритмы (указываемые через параметр patchAlgo), обеспечивая эффективное объединение локальных старых APK с загруженными пакетами патча для генерации полных APK целевой версии;
  2. Управление загрузкой: Встроенная возможность загрузки пакетов патча, поддерживающая возобновление после перерыва, мониторинг прогресса загрузки и автоматическую повторную попытку после неудачной загрузки;
  3. Адаптация к установке: Автоматически обрабатывает запрос разрешений на установку в системе Android, проверку APK-файлов (MD5/SHA), тихую установку (требует системных разрешений) или руководство по ручной установке;
  4. Обратный вызов статуса: Возвращает ключевые события, такие как прогресс загрузки, статус объединения и результаты установки, приложению, облегчая отображение статуса обновления в пользовательском интерфейсе фронтенда;
  5. Поддержка настройки: Поддерживает настраиваемые пути загрузки, стили всплывающих окон обновления, логику обработки ошибок и т. д. для адаптации к потребностям взаимодействия разных приложений.

Основные преимущества:

  • Лёгкий и независимый: Маленький размер SDK, нет дополнительных избыточных зависимостей, избегая увеличения размера пакета приложения;
  • Стабильный и эффективный: Оптимизированный алгоритм объединения, низкое использование памяти, быстрая скорость объединения и совместимость с устройствами с низкой конфигурацией;
  • Простая интеграция: Предоставляет лаконичные интерфейсы API, позволяющие разработчикам быстро интегрироваться без обращения внимания на низкоуровневую реализацию дифференциального объединения.
  1. Фронтенд запускает проверку обновления: После запуска приложения или ручного запуска обновления пользователем интерфейс фронтенда отображает статус запроса обновления. Указав параметр patchAlgo (выбрав дифференциальный алгоритм), он вызывает API-интерфейс UpgradeLink и передает информацию, такую как текущий номер версии приложения и номер канала;
  2. Сервер возвращает конфигурацию обновления: UpgradeLink проверяет правила обновления на основе переданных параметров и возвращает результат (если поддерживается дифференциальное обновление, возвращает адрес пакета патча, номер целевой версии, информацию о проверке и т. д.; если не поддерживается, возвращает адрес полного APK и следует процессу полного обновления);
  3. Клиент обрабатывает пакет патча: DiffUpdater получает адрес пакета патча, возвращенный UpgradeLink, инициирует загрузку пакета патча (с мониторингом прогресса) и проверяет целостность файла после завершения загрузки;
  4. Дифференциальное объединение для генерации нового APK: DiffUpdater вызывает указанный дифференциальный алгоритм для объединения локального старого версии APK с загруженным пакетом патча, генерирует полный APK целевой версии и выполняет проверку MD5 для обеспечения корректности файла;
  5. Запуск установки и обновления: DiffUpdater автоматически запрашивает разрешения на установку, руководит пользователем по завершению установки APK целевой версии, и приложение автоматически запускает новую версию после установки;
  6. Обработка исключений: Если загрузка не удалась, объединение не удалось или установка не удалась, система автоматически вызывает обратный вызов статуса ошибки, и пользователи могут выбрать повторную попытку операции или переключение на процесс полного обновления.

IV. Основное резюме

  • UpgradeLink отвечает за "серверную поддержку": Предоставляет правила обновления, информацию о версиях и ресурсы пакета патча, решая проблему принятия решений "что обновлять и как обновлять";
  • DiffUpdater отвечает за "выполнение на фронтенде": Завершает загрузку, объединение и установку пакета патча, решая проблему выполнения "как реализовать обновление";
  • Эти два компонента работают вместе, образуя полное решение дифференциального обновления "серверная конфигурация — выполнение на фронтенде", помогая разработчикам реализовать эффективные и экономичные по данным функции обновления приложений при минимальных затратах и улучшая пользовательский опыт и эффективность разработки.

toolsetlink@163.com