Розробники Android домоглися зменшення розміру оновлень в середньому на 65%

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

Для того, щоб зменшити розмір оновлень, розробники Android ще в червні 2016 року стали застосовувати алгоритм bsdiff за авторством Коліна Персіваля для патча бінарних файлів. Тоді це допомогло знизити розмір додатків і оновлень до них, в середньому, на 47% відносно повного АПК.

Тепер же команда Android хоче поділитися новим рішенням, яке дозволяє знизити обсяг оновлень, в середньому 65% від початкового розміру. Мова йде про File-by-file patching.

Підхід досить простий. Замість того, щоб скачувати повний АПК і заново всі файли програми, система оновлення виробляє звірку користувальницьких файлів, викачаних. Це дозволяє завантажувати тільки ті файли, які зазнали будь-які зміни в ході розробки.

За словами розробників Android цей простий, але ефективний підхід дозволяє скоротити трафік оновлень на 6 петабайт щодня.

Але є і деякі підводні камені. Стиснення APK-файлів відбувається майже так само, як і ZIP, з використанням Deflate. Це дозволяє значно зменшити розмір, але в теж час ускладнює визначення того, які саме файли були внесені зміни:

image
Демонстрація роботи Deflate

Як видно на зображенні вище, внесення навіть одного символу повністю змінює структуру пережатої файлу. Отже, file-by-file patching ґрунтується на порівнянні нестислих файлів між собою. В процесі оновлення відбувається звірка розпакованих файлів, як старих, так і нових. На цьому етапі все ще використовується bsdiff. Потім, при застосуванні патча виявляються файли, що вимагають заміни і викачуються саме вони. Після цього APK знову пересобирается вже на стороні пристрою. В якості доказів розробники приводять зведену таблицю по ряду найбільш популярних додатків для Android:

image

Ці програми вже використовують систему оновлення file-by-file.

У цього підходу є кілька мінусів. Перше — кінцевий APK повинен повністю збігатися з вихідним, байт в байт. На цей параметр впливає збірка Deflate (найчастіше використовується зібрана на основі Zlib) та її налаштування.

Як виявилося в ході аналізу, всі розробники використовують тільки два параметри стиснення за допомогою Deflate: або за замовчуванням (6), або максимальний (9). Будь-яких інших параметрів розробники Android не виявили.

Інший мінус підходу — вимоги до обчислювальних потужностей на кінцевому пристрої, конкретно, до процесора. Процеси розпакування, звіряння і зворотного складання в АПК вимагають значних потужностей від пристрою користувача, і не всі існуючі девайси зможуть впоратися з цією процедурою в рівній мірі успішно. Це призводить до більш тривалого застосування патча на старих і малопотужних пристроях. Крім того, час обробки збільшується пропорційно, виходячи з розмірів оновлення.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.