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

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

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

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

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

Ответы (3)

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

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

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

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

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

SO Вопрос: https://stackoverflow.com/questions/18045290/for-mobile-app-updates-why-does-the-entire-app-need-to-be-downloaded-again

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

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

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

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

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

И что касается Windows, то .NET framework и Linux работают по-разному...

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

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

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