Почему обновления приложения загружают все приложение, а не только «обновления»?

10

Я нахожу довольно странным, что для обновления приложения в Android (или даже iOS) загружается все приложение, а не только реальные «Обновления».

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

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

У кого-нибудь есть объяснение, почему эта модель была реализована?

Gh0st
источник

Ответы:

13

Насколько я знаю, он загружает только обновления (называемые «дельта») на Jellybean 4.1 и выше. Очевидно, что первоначальная установка - это полное приложение, но обновления загружают только те данные, которые изменились по сравнению с текущей установленной версией (т. Е. Ее дельта). Вы не увидите ничего особенного при обновлении большинства приложений, все равно будет выглядеть, как будто оно загружает полное приложение, но в некоторых более крупных приложениях вы увидите, «скачут» ли части загрузки, что указывает на то, что оно просто получает дельту.

В Engadget и AndroidCentral есть статьи, указывающие, что в магазине Play есть дельта-обновления

bmdixon
источник
1
Насколько «большим» является приложение большего размера? Я имею в виду, что мне все еще нужно скачать весь Temple Run 2, чтобы получить Усэйн Болт! В любом случае, спасибо, что поделились статьями.
Gh0sT
Я не уверен. Я знаю, что для чего-то вроде Asphalt 6 (который составляет не менее 1 ГБ) он загружал только изменения в прошлом. Возможно, он применяется только для больших обновлений, или, возможно, не удалось создать дельту для обновление Temple Run 2 по какой-то причине? Они могут создавать дельту только тогда, когда изменился менее чем определенный процент. (NB. Все это только мои мысли)
bmdixon
Дельта не мгновенная. Если вы загрузите обновление сразу после того, как оно было отправлено в игровой магазин, дельта пока не может быть сгенерирована. (только предположение)
Матье Харле
4

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

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

SO Вопрос: /programming/18045290/for-mobile-app-updates-why-does-the-entire-app-need-to-be-downloaded-again

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

Я уверен, что Google также имел некоторые причины безопасности для запрета патчей. Патчи кода, как правило, оставляют непредвиденные дыры в безопасности и уязвимости.

Джон
источник
2
Обновления AFAIK delta были представлены в GPlay около полугода назад. И да, есть еще что-то вроде бинарных различий. По сути, их .apkтакже можно просто распаковать на серверах Google, чтобы сравнить их между версиями и создать необходимые дельты. Хотя я не знаю, как это на самом деле делается.
Иззи
Я очень заинтересован в этом сейчас, вы должны выбрать это как разработчик или Google управляет этим для вас?
Джон
1
@ Джон Google делает это автоматически, разработчик не должен предпринимать никаких действий.
onik
-1

В основном файл пакета приложения Android (* .apk) создается после того, как код приложения готов к публикации. Этот файл создается после компиляции и сборки и из процесса преобразования DALVIK,

Этот файл содержит все ресурсы, т.е. ваши изображения, аудио, макеты, классы,

А что касается окон .NET Framework и Linux Framework оба работают по-разному ...

Если вы хотите заменить только определенный код, вы можете сделать это в Android, но для безопасности вам нужно снова подписать это приложение.

То, что делает DALVIK, является необратимым процессом, поэтому, если новая функция добавлена, то как старая версия получит к ней доступ, не зная об этом ??

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

Амит Модак
источник