Что такое инкрементное обновление

Русские Блоги

Android инкрементный принцип обновления и реализация

1. Инкрементный обзор обновления

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

Наша игра написана в LUA, поэтому клиент Android разделен на:

Обновление APK (отдельно до 1. Полное обновление; 2. Инкрементное обновление; 3. Модернизация третьего лица);

Lua Upgrade (подтексты до 1. Hall Upgrade; 2 Каждая обновление игры), а игра Lua является горячим механизмом обновления;

Эта статья в основном объясняется, как реализованы дополнительные обновления в обновлениях APK.

1.1 APK Инкрементный процесс обновления

Принцип инкрементных обновлений прост, то есть старая версия APK сначала сделана дифференцированным отделом APK, получите обновленную часть патча, например, старая версия APK, имеет 20 м, новая версия имеет 21 м, обновленную часть Может иметь только 1 м влево и вправо, что нужно вот то, что размер дифференциального пакета не просто, потому что есть необходимость включать в себя некоторые вещи, связанные с контекстом, используйте преимущества и обновления, тогда вам не нужно скачивать Полный файл 21M, просто загрузить обновление детали можно, а дифференциальный пакет части обновления невелики, а потеря трафика может быть в значительной степени уменьшена.

1.2 Как генерировать дифференциальный пакет

Обычно используют bspatch Сделать дифференциальные пакеты.

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

Адрес загрузки исходного кода Bsdiff:

Вы можете позвонить через JNI в коде Java bspatch C код, генерируют дифференциальные пакеты

1.3 Как синтезировать новый пакет обновления

bspatch Формат команды:

Android будет иметь оригинальную резервную копию APK в каталоге данных / приложении, а новый APK может быть синтезирован с исходным патком APK Backup и Server Patch. Однако обратите внимание на контроль версий, патч-пакет должен быть разницей между APK, который должен быть синтезирован в исходном APK. Оригинальная версия отличается, обновленная версия отличается, и используемый дифференциальный пакет не является одним.

2. Реализация кода

На Github есть хороший проект с открытым исходным кодом. SmartAppUpdate Уже bsdiff с участием bspatch Сделайте хороший пакет, вы можете использовать его напрямую.

android-xBuild Это проект с открытым исходным кодом, который интегрирует дифференциал APK и синтез, дифференциал ZIP и синтез, упаковку LUA, упаковку APK, PNG / JPG сжатие изображения пятью функции

2.1 bsdiff улучшение

Bsdiff улучшен в проекте Google Chrome

Адрес реализации кода:

3. Инкрементное обновление

Инкрементное обновление не является идеальным способом обновления, по крайней мере, следующие два очка:

Интеллектуальная рекомендация

Многослойная презентацияViewController Jap

Распечатать список с конца до головы

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

Типы данных и переменные

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

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

оглавление 1. Одно место 2. Случайное расположение 3. Добавьте баллы для оценки 4. Получение файла 5. Установите уровень сложности. 6. Срок завершения 7. Выберите заполнение пропусков. 1. Одно место Н.

Источник

Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты

Яндекс.Почта — большое и сложное веб-приложение. Для первоначальной загрузки ей необходимо более 1 МБ статических ресурсов (JS/CSS/Шаблонов). При этом Яндекс.Почта обновляется два раза в неделю, а иногда и чаще.

Но при обновлениях от версии к версии меняется не так много кода — особенно в случае хотфиксов. Это показывают и фризы. Чтобы снизить время загрузки почты при выходе новых версий, мы уже делаем следующее:

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Мы подумали: «А что если хранить где-то старую версию файлов (например, в localStorage), а при выходе новой передавать только diff между ней и той, которая сохранена у пользователя?» В браузере же останется просто наложить патч на клиенте. О том, что из этого получилось и каким выводам мы с Panya пришли, читайте под катом.

На самое деле эта идея не нова. Уже существуют стандарты для HTTP — например, RFC 3229 “Delta encoding in HTTP” и Google SDHC, — но по разным причинам они не получили должного распространения в браузерах и на серверах.

Мы же решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления, начали искать реализации diff на JS. На популярных хостингах кода нашли библиотеки: VCDiff, google-diff-patch-match, jsdiff, Pretty Diff и jsdifflib.

Последние две библиотеки (jsdifflib и Pretty Diff) нам сразу не подошли, потому что не умеют накладывать патч, а показывают только изменения между строками. А jsdiff генерирует патч в формате, похожем на google diff patch match, но накладывает его в пять раз медленнее. В итоге у нас осталось два кандидата.

Для окончательного выбора библиотеки нам нужно сравнить их по двум ключевым для нас метрикам. Первая — размер генерируемого патча. Мы нагенерировали патчей для разных ресурсов разных версий и сравнили google diff patch match и vcdiff с разным размером блока.

Vcdiff (размер блока 3)Vcdiff (размер блока 10)Vcdiff (размер блока 20)google diff patch match
13957358634319297
865367309910
4615185417366740

Как видно по таблице результатов, vcdiff с размером блока 20 байт имеет наименьший размер патча. Вторая ключевая метрика для нас — время наложения патча на клиенте.

БиблиотекаIE 9Opera 12Firefox 19Chrome
vcdiff (размер блока 10)8553
google diff patch match1363764335

Тут тоже vcdiff выигрывает c большим отрывом. В IE 9 и ниже google-diff-patch-match накладывает патч больше, чем за секунду.

У нас определился победитель — vcdiff. Этот алгоритм был предложен в 2002 году (RFC3284). Он достаточно популярен и имеет множество реализаций на разных языках, в том числе на C++, Java и JS.

После того как мы определились с библиотекой для диффа, нужно определиться с тем, где и как хранить статику на клиенте. Яндекс.Почта — современное веб-приложение, у нас нет старых браузеров, поэтому почти все поддерживают localStorage. Он является удобным местом для хранения статики. Никаких личных данных пользователя там нет, поэтому нет проблем с безопасностью. Каждый файл хранится в отдельном ключе. В этот ключ вшито не только название ресурса, но и его версия. Это позволяет избежать проблем, когда версия смогла записаться в localStorage, а сам файл — нет (или наоборот), в варианте, когда файл и его метаданные хранятся в разных ключах.

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

То есть это обычный массив из объектов. Каждый объект — отдельный ресурс. У каждого объекта есть три свойства. «k» — названия ключа в localStorage для этого ресурса. «p» — патч для ресурса, который сгенерировал vcdiff. «s» — чексумма для ресурса актуальной версии, чтобы потом можно было проверить правильность наложения патча на клиенте. Чексумма вычисляется по алгоритму Флетчера.

Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде CRC16/32 или md5? Потому что он быстрый, компактный и легок в реализации.

Процесс обновления

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

Если же есть сохраненная старая версия в localStorage, посылаем запрос за файлом с патчем. Далее обновляем все ресурсы и проверяем чексумму. Если все чексуммы совпадают, обновляем содержимое ключей в localStorage.

Что получили

Фактически мы экономим 80-90% трафика. Размер загружаемой статитки в байтах:

РелизС патчемБез патча
7.7.20 — 7.7.21397174 549
7.7.21 — 7.7.2238353 995
7.7.22 — 7.818 077611 378
7.8 — 7.8.502 817137 820
7.8.50 — 7.8.800014 868443 159

Что же мы получили в реальности?

В реальности скорость загрузки выросла совсем немного. Почему так?

У нас сразу появилась проблема с проверкой чексуммы. Считать его для всего файла оказалось очень дорого. Даже в современных браузерах на мощных компьютерах на один файл уходит примерно 20мс, а в Opera 12 и IE9 — более 100мс. Для загрузки Почты надо минимум шесть файлов. С учетом того, что JavaScript в браузере — однопоточный, то получаем последовательный расчет хеша для каждого файла, то есть в лучшем случае это будет минимум 120мс, а в реальности — еще больше.

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

Проблема усугубляется еще и тем, что, скажем, валидность JS мы можем проверить просто исполнив его. Если полученный JS не запускается, то патч не прошел — надо все стирать и перезагружать. А вот с CSS проблема остается открытой. Невалидный CSS просто исполнится, не вызовет никаких ошибок, но пользователь увидит не то (у нас даже были такие случаи). Да, можно дописать валидатор CSS после его исполнения, но это опять же повлияет на скорость загрузки — по аналогии с хешсуммой.

Еще есть проблема со слишком большими патчами. Мы ограничили размер патча 30% от исходного файла. Если патч получается слишком большим, то браузер загружает весь файл целиком. И в итоге с этой схемой мы получили блокирующий HTTP-запрос. Рассказать заранее, с каких версий можно обновляться, а с каких — нет, мы не можем, потому что информация о кеше в браузере. Соответственно, наш загрузчик понимает, что есть кеш и идет за патчами. В этот момент ничего больше не грузится. Если в патчах сказано «грузи все полностью», то загрузчик начинает обычный процесс загрузки, как будто нет кешей, но время уже потеряно.

По сути патч VS. скачивание файла — это соревнование между скоростью браузера и скоростью подключения к интернету. Если смотреть на мировые тенденции в этом размере, то компьютеры не становятся быстрее. Наоборот, мощные стационарные компьютеры заменяются планшетами и ноутбуками, которые не обладают той же производительностью. В то же время интернет становится быстрее, причем обычно бесплатно. Обновляются тарифы провайдеров, которые строят сети нового поколения.

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

Мы поняли, что ни на какие 146% загрузку почты таким способом не ускорить. А лишнюю головную боль как разработчикам, так и тестировщикам получить легко — появляется еще один способ загрузки страницы, который надо проверять для каждого релиза. В то же время фризы и грамотное деление кода на модули дает понятный и абсолютно безопасный, с точки зрения тестирования и поддержки, способ ускорения.

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

Источник

Русские Блоги

(9) Инкрементальное обновление Android.

Заявление об авторских правах: эта статья является оригинальной статьей блоггера и не может быть воспроизведена без разрешения блоггера.
Эта статья предназначена исключительно для личного изучения. Из-за ограниченного объема ошибки неизбежны. Если вы узнаете, вы можете общаться.

I. Обзор

1. Что такое инкрементное обновление

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

Обычное обновление:
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

В этом процессе обновления обычно используется асинхронное обновление. Старая версия apk работает нормально, а загрузка выполняется асинхронно в фоновом режиме. После завершения загрузки появляется всплывающее окно с запросом на установку.

Инкрементное обновление:
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Инкрементное обновление черезАлгоритм Хаффмана, Рассчитайте разницу между старым apk и новым apk (разница), когда клиент обновляет версию, ему нужно только загрузить пакет разницы на локальный и объединить со старым apk, сгенерировать новый apk, а затем установить это.

2. Преимущества инкрементального обновления

Несколько лет назад в то время сетевая среда была не очень хорошей, а плата за трафик была дороже.Когда была выпущена новая версия, пользователи не хотели обновляться. Чтобы решить эту проблему, Google предложил Smart App Update или инкрементное обновление (также называемое дифференциальным обновлением).

Хотя сетевая среда сейчас лучше, apk каждого приложения также становится все больше и больше. В настоящее время инкрементное обновление по-прежнему является лучшим решением проблемы слишком большого пакета обновлений. Возможно, что для нескольких приложений G размер пакета обновления составляет всего несколько сотен или даже десятков M, что не только значительно увеличивает скорость обновления, но и значительно снижает стоимость трафика для сервера.

3. Недостатки инкрементального обновления

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

Если размер apk очень маленький, например, всего несколько M, в это время дополнительный пакет будет составлять сотни K или M. Если использование инкрементного обновления не стоит выгоды, инкрементное обновление усложняется, а процесс различия и слияния занимает больше времени. Кроме того, когда выполняется обновление основной версии, пакет инкрементного обновления также становится больше, что в настоящее время не подходит для инкрементного обновления.

4. Алгоритм Хаффмана.

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

APK также существует в двоичном формате в хранилище файлов, и алгоритм Хаффмана используется для сравнения двоичных файлов новой и старой версий apk.Если содержимое одинаково, сохраняется только индекс; если он отличается, сохраняются сжатое содержимое и индекс.

5. Инкрементное обновление и горячее обновление, плагин

Плагинизация использует pluginManager, который разделен на функциональные блоки для разработки. При обновлении обновляется весь функциональный блок. Например, есть модуль PluginA, который необходимо обновить до модуля PluginB, который тяжелее, чем горячее обновление.

Во-вторых, разница

Дифференциация и объединение в основном реализованы с помощью bsdiff / bspatch и полагаются на bzip2. Ниже приведены два адреса загрузки. Загрузите два сжатых пакета соответственно.
официальный сайт bsdiff / bspatch
http://www.daemonology.net/bsdiff/

1. Создайте исполняемые файлы.

Щелкните на официальном сайте bsdiff / bspatch.Windows port Чтобы загрузить bsdiff4.3-win32-src.zip, это пакет среды win, вы также можете нажатьhere Загрузите пакет bsdiff-4.3.tar.gz в среде Linux.

В папке, распакованной с помощью bsdiff4.3-win32-src.zip, уже находятся упакованные исполняемые файлы bsdiff.exe и bspatch.exe в папке Release. Мы не используем это здесь и создаем новый C. проект упакован.

1.Используйте Visual Studio для создания нового пустого проекта Diff и создайте две новые папки include и src в разделе Diff для хранения файлов заголовков и исходного кода соответственно.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Точно так же добавьте файлы в src к исходным файлам.

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

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

5.Запустить проект и сообщить об ошибке.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Код серьезности Описание Элемент Строка файла Состояние отображения запрета
Ошибка C4996’strcat ‘: эта функция или переменная может быть небезопасной. Рассмотрите возможность использования вместо нее strcat_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Подробнее см. в интерактивной справке. Diff c: \ users \ zx \ документы \ Visual Studio 2015 \ projects \ diff \ diff \ src \ bzlib.c 1416

6.Продолжайте выполнение проекта и продолжайте сообщать об ошибках. (Эта ошибка отличается от указанной выше)
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление
Код серьезности Описание Элемент Строка файла Статус отображения запрещен
Ошибка C4996’setmode ‘: имя POSIX для этого элемента устарело. Вместо этого используйте имя, соответствующее ISO C и C ++: _setmode. Подробности см. в интерактивной справке. Diff c: \ users \ zx \ документы \ визуальная студия 2015 \ проекты \ diff \ diff \ src \ bzlib.c 1422

7.Продолжите выполнение проекта и сгенерируйте исполняемый файл Diff.exe.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Примечание:Когда Visual Studio выполняет переключение платформы, вам необходимо выполнить описанные выше шаги для перенастройки.

2. Создайте дифференциальный пакет.

Подготовьте установочные пакеты нового и старого приложений и скопируйте их в папку, где находится Diff.exe.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

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

3. Создайте файлы библиотеки.

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

1.Вот MyEclipse в качестве фоновой разработки,Создать новый веб-проект, Создайте класс Diff.java. (Если нет инструмента фоновой разработки, вы можете вместо этого использовать проект java, просто настройте метод jni)

2.Далее идет базовый процесс JNI: сгенерируйте файл заголовка, скопируйте его в проект Diff, созданный Visual Studio выше, и настройте его.

Те, кто не знаком с базовым процессом JNI, могут обратиться к предыдущим примечаниям: (1) Базовый процесс JNI и типы данныхhttp://blog.csdn.net/qq_18983205/article/details/78958813

Скопируйте файл заголовка в папку include.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

3.Измените имя функции основной функции в bsdiff.cpp на diff_main.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

4.Добавьте заголовочный файл com_xiaoyue_Diff.h в bsdiff.cpp.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

5.Чтобы реализовать собственный метод в bsdiff.cpp, вызовите метод diff_main.

6.Создайте файл библиотеки dll в соответствии с базовым процессом JNI и скопируйте его в веб-проект. (При генерации dll обратите внимание на выбор платформы. Для переключения платформы требуется перенастройка)

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

4. Вызов JNI для создания разницы

Добавьте загрузку в Diff.java.

Diff.java

Напишите основную функцию в веб-проекте для тестирования.

Примечание:Путь не может содержать китайские символы, иначе он будет искажен и его нужно будет обработать. Обработка искажений на китайском языке может относиться к: (3) JNI Китайский искаженныйhttp://blog.csdn.net/qq_18983205/article/details/78840507

результат:
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

5. Сгенерируйте дифференциальный пакет под Linux.

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

В это время будет сообщено об ошибке, bsdiff.c не может найти файл заголовка bzlib.h.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

3.Измените файл bsdiff.c #include За #include «bzlib.h» 。

Примечание:Поскольку отдельные лица используют виртуальные машины для обмена файлами, возникает несколько проблем: 1. Измените общие файлы непосредственно на платформе Windows, и они не будут синхронизироваться с общими файлами виртуальной машины. 2. Непосредственно модифицируйте расшаренные файлы под Linux, прав не хватает, пробного пользователя root нет, модификация посложнее. Наконец, сделайте копию общего файла в Linux, а затем измените права доступа к файлу.

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

Три, слияние

1. Интеграция файлов библиотеки

Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

3.Измените файл конфигурации компиляции CMakeLists.txt.

4.Измените имя функции основной функции в файле bspatch.c на path_main. В настоящее время проект восстановления может быть успешным.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

5.Согласно JNI, в основном создается патч для собственного метода и вызывается метод из файла bspatch.c.

Если вы не понимаете базовый процесс JNI, обратитесь к предыдущим примечаниям: (1) Базовый процесс JNI и типы данныхhttp://blog.csdn.net/qq_18983205/article/details/78958813

Создайте класс BsPatch.java.

Используйте команду javah, чтобы сгенерировать файл заголовка и скопировать его в папку cpp.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Добавьте заголовочный файл com_xiaoyue_bspatch_BsPatch.h в bspatch.c и реализуйте собственный метод.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Внедрите патч собственного метода в batch.c.

2. Вызов слияния

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

Код Android:

Contants :

Contants управляет путем к каждому файлу.

DownLoadUtils :

ApkUtils :

MainActivity :

В MainActivity асинхронная задача используется для простой загрузки дифференциального пакета, его интеграции и установки.

activity_main.xml:

Кроме того, вам необходимо добавить разрешения в AndroidManifest.xml.

Сервер
Измените интерфейс и номер версии на стороне Android, сгенерируйте новый и старый apk, примените код дифференциального пакета предыдущего поколения для создания дифференциального пакета, поместите его непосредственно в каталог WebRoot веб-проект и разверните его на сервере Tomcat. Вот и все.
Что такое инкрементное обновление. Смотреть фото Что такое инкрементное обновление. Смотреть картинку Что такое инкрементное обновление. Картинка про Что такое инкрементное обновление. Фото Что такое инкрементное обновление

Примечание:Если сервера нет, напрямую сгенерируйте пакет различия, скопируйте пакет различия в соответствующий каталог Android, измените код, пропустите этап загрузки, напрямую выполните различие, а затем установите его.

3. Проверка

Чтобы проверить, успешно ли объединен разностный пакет, нужно посмотреть, можно ли установить объединенный разностный пакет в обычном режиме, и сравнить значение MD5 установочного пакета apk.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *