All android update tool

Download SPD Upgrade Tool

SPD Upgrade Tool (SpreadTrum Flash Tool) is a windows application that allows you to flash or install .pac firmware (ROM) on devices running on Spreadtrum/Unisoc Chipset.

Here on this page, we have shared the latest version of the SPD Upgrade tool and the previous versions.

Portable Application:

It comes as a portable application, so you don’t have to install it on your computer to use it. Instead, download and extract the tool on your computer and open the UpgradeDownload.exe file to launch the Application.

Flash Firmware:

It helps you to install or Flash Stock Firmware on Spreadtrum/Unisoc Powered Smartphone, Feature Phone, and Tablets. All you need to have the correct .pac firmware of your Spreadtrum/Unisoc Device > Install the SPD Driver > Launch the Tool > Click on Load Packet Button > Locate the .pac file from the firmware folder > Click on Start Downloading Button to begin the Flashing.

Support Spreadtrum Chipset:

It comes in support of devices running on Spreadtrum/Unisoc Chipset. Once you have installed the Spreadtrum Drivers on the computer, the Upgrade Tool can easily detect the connected device and get ready to flash the firmware on the device.

Support .pac and .p5c Format:

It supports the flashing of .pac and .p5c based Stock Firmware on the Spreadtrum/Unisoc Devices. Therefore, you can easily find the .pac file in the Stock Firmware of your Spreadtrum/Unisoc Smartphone, Feature Phone, and Tablets.

Download SPD Upgrade tool (SpreadTrum)

Upgrade Tool is compatible with all versions of Windows OS, including Windows XP to Windows 11 (x32 or x64 bit). If in case you were looking for the latest version of the Upgrade Tool, then use the following links to get it on your computer:

Источник

All android update tool

Platform-tools: r31.0.3
ADB: 1.0.41 (31.0.3-7562133)
Fastboot: 31.0.3-7562133
Make_f2fs: 1.14.0 (2020-08-24)
Mke2fs: 1.46.2 (28-Feb-2021)
Последнее обновление утилит в шапке: 01.08.2021

ADB (Android Debug Bridge — Отладочный мост Android) — инструмент, который устанавливается вместе с Android-SDK и позволяет управлять устройством на базе ОС Android.
Работает на всех Android-устройствах, где данный функционал не был намеренно заблокирован производителем.
Здесь и далее: PC — ПК, компьютер к которому подключено устройство.
ADB — консольное приложение для PC, с помощью которого производится отладка Android устройств, в том числе и эмуляторов.
Работает по принципу клиент-сервер. При первом запуске ADB с любой командой создается сервер в виде системной службы (демона), которая будет прослушивать все команды, посылаемые на порт 5037.
Официальная страница
ADB позволяет:

  • Посмотреть какие устройства подключены и могут работать с ADB.
  • Просматривать логи.
  • Копировать файлы с/на аппарат.
  • Устанавливать/Удалять приложения.
  • Удалять (очищать) раздел data.
  • Прошивать (перезаписывать) раздел data.
  • Осуществлять различные скрипты управления.
  • Управлять некоторыми сетевыми параметрами.

Поставляется ADB в составе инструментария разработчика Андроид (Android SDK), который, в свою очередь входит в состав Android Studio.

Если что-то неправильно, то в списке подключенных устройств (List of devices attached) будет пусто.

Скрытые команды ADB
adb -d Команда посылается только на устройство подключенное через USB.
Внимание: Выдаст ошибку, если подключено больше одного устройства.

adb -e Команда посылается на устройство в эмуляторе.
Внимание: Выдаст ошибку, если подключено больше одного эмулятора.

adb -s Команда посылается на устройство с указанным серийным номером:

adb -p Команда посылается на устройство с указанным именем:
Если ключ -p не указан, используется значение переменной ANDROID_PRODUCT_OUT.

adb devices Список всех подсоединенных устройств.

adb connect [: ] Подсоединиться к андроид хосту по протококу TCP/IP через порт 5555 (по умолчанию, если не задан).

adb disconnect [ [: ]] Отсоединиться от андроид подключенного через TCP/IP порт 5555 (по умолчанию, если не задан).
Если не задан ни один параметр, отключиться от всех активных соединений.

adb push Копировать файл/папку PC->девайс.

adb pull [ ] Копировать файл/папку девайс->PC.

adb sync [ ] Копировать PC->девайс только новые файлы.
Ключи:
-l Не копировать, только создать список.

adb shell Запуск упрощенного unix shell.
Примеры использования

adb emu Послать команду в консоль эмулятора

adb install [-l] [-r] [-s] Послать приложение на устройство и установить его.
Пример: adb install c:/adb/app/autostarts.apk Установить файл autostarts.apk лежащий в папке /adb/app/ на диске с:
Ключи:
-l Блокировка приложения
-r Переустановить приложение, с сохранением данных
-s Установить приложение на карту памяти
Установка split apk

adb uninstall [-k] Удаление приложения с устройства.
Ключи:
-k Не удалять сохраненные данные приложения и пользователя.

adb wait-for-device Ждать подключения устройства.

adb start-server Запустить службу/демон.

adb kill-server Остановить службу/демон.

adb get-state Получить статус:
offline Выключен.
bootloader В режиме начальной загрузки.
device В режиме работы.

adb get-serialno Получить серийный номер.

adb status-window Непрерывный опрос состояния.

adb remount Перемонтировать для записи. Требуется для работы скриптов, которые изменяют данные на.

adb reboot bootloader Перезагрузка в режим bootloader.

adb reboot recovery Перезагрузка в режим recovery.

adb root Перезапуск демона с правами root

adb usb Перезапуск демона, прослушивающего USB.

adb tcpip Перезапуск демона, прослушивающего порт TCP.

adb ppp [параметры] Запуск службы через USB.
Note: you should not automatically start a PPP connection. refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
Параметры:
defaultroute debug dump local notty usepeerdns

FastBoot — консольное приложение для PC. Используется для действий над разделами

fastboot devices Список присоединенных устройств в режиме fastboot.
fastboot flash Прошивает файл .img в раздел устройства.

fastboot erase Стереть раздел.
Разделы: boot, recovery, system, userdata, radio
Пример: fastboot erase userdata Стирание пользовательских данных.

fastboot update Прошивка из файла имя_файла.zip

fastboot flashall Прошивка boot + recovery + system.

fastboot getvar Показать переменные bootloader.
Пример: fastboot getvar version-bootloader Получить версию bootloader.

fastboot boot [ ] Скачать и загрузить kernel.

fastboot flash:raw boot [ ] Создать bootimage и прошить его.

fastboot devices Показать список подключенных устройств.

fastboot continue Продолжить с автозагрузкой.

fastboot reboot Перезагрузить аппарат.

f astboot reboot-bootloader Перезагрузить девайсв режим bootloader.
Перед командами fastboot можно использовать ключи:
-w стереть данные пользователя и кэш
-s Указать серийный номер устройства.
-p

Указать название устройства.
-c Переопределить kernel commandline.
-i Указать вручную USB vendor id.
-b Указать в ручную базовый адрес kernel.
-n

Читайте также:  Csr 2 4pda android

Указать размер страниц nand. по умолчанию 2048.

Команду logcat можно использовать с машины разработки
$ adb logcat
или из удаленного shell
# logcat Каждое сообщение лога в Android имеет тэг и приоритет
Тэг – это строка указывающая компонент системы, от которого принято сообщение (например: View для системы view)
Приоритет – имеет одно из нижеследующих значений (в порядке от меньшего к большему):
V — Verbose (Низший приоритет).
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent (Наивысший приоритет, при котором ничего не выводится).

Получить список тэгов, используемых в системе, вместе с их приоритетами можно запустив logcat. В первых двух столбцах каждого из выведенных сообщений будут указаны / .
Пример выводимого logcat сообщения:
I/ActivityManager( 585): Starting activity: Intent

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

Пример ниже выводит в лог все сообщения с тэгом «ActivityManager» с приоритетом «Info» или выше, и сообщения с тэгом «MyApp» и приоритетом «Debug» или выше:
adb logcat ActivityManager:I MyApp:D *:S
Последний элемент в выражении фильтра *:S устанавливает приоритет «silent» для всех остальных тэгов, тем самым обеспечивая вывод сообщений только для «View» и «MyApp». Использование *:S – это отличный способ для вывода в лог только явно указанных фильтров (т.е. в выражении фильтра указывается «белый список» сообщений, а *:S отправляет все остальное в «черный список»).

При помощи следующего выражения фильтра отображаются все сообщения с приоритетом «warning» или выше для всех тэгов:
adb logcat *:W

Если logcat запускается на машине разработчика (не через удаленный adb shell), можно также установить значение выражения фильтра по умолчанию задав переменную окружения ANDROID_LOG_TAGS:
export ANDROID_LOG_TAGS=»ActivityManager:I MyApp:D *:S»

Следует обратить внимание что задав переменную окружения ANDROID_LOG_TAGS она не будет работать в эмуляторе/устройстве, если вы будете использовать logcat в удаленном shell или используя adb shell logcat.
Вышеописанная команда export работает в ОС *nix и не работает в Windows.

Контроль формата вывода лога

Сообщения лога в дополнение к тэгу и приоритету содержат несколько полей метаданных. Можно изменять формат вывода сообщений показывая только конкретные поля метаданных. Для этого используется параметр -v и указывается один из ниже перечисленных форматов вывода.

brief Показывать приоритет/тэг и PID процесса (формат по умолчанию).
process Показывать только PID.
tag Показывать только приоритет/тэг.
thread Показывать только процесс:поток и приоритет/тэг.
raw Показать необработанное сообщение, без полей метаданных.
time Показывать дату, время вызова, приоритет/тэг и PID процесса.
long Показывать все поля метаданных и отдельно сообщения с пустыми строками.

При запуске logcat можно указать формат вывода используя параметр -v:
adb logcat [-v

Источник

All android update tool

Краткое описание:
Управляйте вашим смартфоном через интерфейсы ADB и fastboot
Описание:
Android Tool — мощная и красивая Open Source программа, созданная для облегчения использования популярных команд adb и fastboot. Темная тема, интуитивно понятный интерфейс и другие полезные функции

  • Пакетная или одиночная установка приложений (.apk)
  • Открытие, закрытие или удаление данных приложения
  • Отключение, включение или удаление системных приложений
  • Получение и сохранение в файл логов с вашего устройства
  • Установка кастомного recovery в fastboot или вайп разделов
  • Всегда самые свежие и актуальные ссылки на прошивки и всё что с ними связано
  • И не только 😉

Использование
Первый способ (рекомендуется)

  • Скачать программу .jar файл
  • Откройте его и нажмите кнопку «Install», чтобы загрузить SDK Platform Tools.
  • Наслаждайтесь

Второй способ (портативный)

  • Загрузите портативный zip-архив для вашей системы
  • Извлеките его
  • Откройте файл программы .jar и наслаждайтесь

Системные требования:

  • ОС (Windows (11, 10, 8.1, 8), Linux, MacOS)
  • JRE (Java Runtime Environment)

Русский интерфейс: Нет

Сообщение отредактировал fast_geek — 11.09.21, 00:30

Sanya ,
Поддержка будет, но как говорится когда неизвестно), если серьезно, то постараюсь в ближайшее время начать перенос, раз интересна такая тема

Сообщение отредактировал fast_geek — 31.07.20, 14:18

Тип: Новая версия
Версия: 0.8.5
Краткое описание: Новая версия Android Tool
Что нового:

  1. Добавлена кнопка выключения устройства (Adb)
  2. Изменён дизайн некоторых элементов для совместимости с шрифтами других систем
  3. Оптимизация кода и производительности
  4. Исправлены несколько ошибок

Про поддержку Linux
Начиная с версии 0.8.5 будет полная совместимость с Linux (Один и тот же .jar файл будет работать и на ОС Windows, и на Linux)
Для работы на Linux в терминале необходимо выполнить команды:

  • sudo apt-get install default-jre — установка jre, (выполнять, если не установлена)
  • sudo apt-get install android-tools-adb android-tools-fastboot — установка adb и fasboot, после этого достаточно извлечь Android_Tool.jar без дополнительных файлов и пользоваться

Тестирование приветствуется!

  • Обновлены неактуальные ссылки в разделе Links
  • Обновлены инструменты adb и fastboot
  • Исправлено несколько багов, а также изменены некоторые элементы для более удобного взаимодействия с ними
  • Рекомендую обновиться всем
    :thank_you: Тестирование приветствуется!

    Сообщение отредактировал fast_geek — 18.08.20, 16:42

    Источник

    Эволюция системы обновления Android

    В этой статье мы рассмотрим все возможные варианты обновления прошивки на устройствах под управлением Fuchsia Android. Особое внимание уделим самому популярному способу — обновлению по воздуху или OTA (over-the-air) — и расскажем об этапах его развития.

    Итак, как можно обновить Android на мобильных устройствах? Занимаясь разработкой ТВ-приставок под управлением этой ОС, мы определили для себя 4 способа, отбросив совсем уж экзотические варианты:

    перепрошивка flash-памяти через аппаратный интерфейс JTAG (если есть);

    перепрошивка flash-памяти с использованием загрузчика (bootloader);

    обновление через Recovery Mode;

    Рассмотрим подробнее каждый из вариантов.

    1. Обновление Android через JTAG-интерфейс

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

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

    2. Обновление Android через Recovery Mode

    Обычно загрузчик является проприетарным, его разрабатывает производитель чипа. Именно bootloader инициализирует доверенную среду выполнения (TEE, trusted execution environment) и проверяет целостность разделов boot и recovery перед переносом выполнения в ядро Linux. Сам загрузчик часто является составным, часть его уровней может быть открытой (например, на базе U-boot), а часть — проприетарной.

    Читайте также:  Совместимость эппл вотч с андроидом

    Bootloader Android позволяет перепрошивать flash-память устройства подготовленными образами разделов. Для этого используется протокол fastboot либо его аналог (в случае Amlogic это будет протокол WorldCup Device). Fastboot, как и его аналог WorldCup Device, — это протокол взаимодействия с bootloader через USB-интерфейс или локальную сеть Ethernet.

    Для перепрошивки необходимо подключить устройство через USB к хосту (есть вариант использовать LAN Ethernet), перевести загрузчик (bootloader) в специальный update-режим и в этом режиме перепрошить flash-память устройства.

    Плюсы и минусы данного метода всё те же, что и для JTAG: так как обновление проходит без участия самой системы Android, при перепрошивке нет ограничений, связанных с версией системы/сборки или ключами безопасности.

    Но, как всегда, есть одно НО. 🙂 Bootloader должен быть разблокирован, а это значит, что мы можем перепрошить сам загрузчик или разделы устройства. Блокировка/разблокировка производится командой fastboot flashing lock/unlock, но для выполнения этой команды может понадобится пароль, установленный тем, кто добрался до этого устройства раньше вас (обычно это производитель).

    3. Обновление Android через Recovery Mode и OTA

    Если первые два варианта обновления оставались неизменными на протяжении всего времени развития Android, то следующие два варианта — обновление через Recovery Mode и OTA — реализуются средствами самой Android и эволюционировали вместе со всей ОС.

    Стоит упомянуть, что Recovery Mode и OTA — это два различных варианта вызова движка обновления Android.

    Recovery или non-A/B System Updates

    Recovery и движок обновления updater (bootable/recovery/updater) — это как раз то, с чего началась система обновления Android (располагается в bootable/recovery в дереве исходников AOSP).

    Схема обновления Recovery (или non-A/B System Updates) задействует специальный раздел восстановления (Recovery), где содержится специальная ОС на основе ядра Linux. Эта ОС на базе Linux содержит программное обеспечение для распаковки загруженного образа обновления и его применения к другим разделам. Так и проходит обновление Android.

    Пример разметки flash-памяти на устройстве с Android 6.0:

    Карта разделов Android 6.0.1

    [mmcblk0p01] bootloader offset 0x000000000000, size 0x000000400000

    [mmcblk0p02] reserved offset 0x000002400000, size 0x000004000000

    [mmcblk0p03] cache offset 0x000006c00000, size 0x000020000000

    [mmcblk0p04] env offset 0x000027400000, size 0x000000800000

    [mmcblk0p05] logo offset 0x000028400000, size 0x000002000000

    [mmcblk0p06] recovery offset 0x00002ac00000, size 0x000002000000

    [mmcblk0p07] rsv offset 0x00002d400000, size 0x000000800000

    [mmcblk0p08] tee offset 0x00002e400000, size 0x000000800000

    [mmcblk0p09] crypt offset 0x00002f400000, size 0x000002000000

    [mmcblk0p10] misc offset 0x000031c00000, size 0x000002000000

    [mmcblk0p11] instaboot offset 0x000034400000, size 0x000020000000

    [mmcblk0p12] boot offset 0x000054c00000, size 0x000002000000

    [mmcblk0p13] system offset 0x000057400000, size 0x000060000000

    [mmcblk0p14] data offset 0x0000b7c00000, size 0x0002ec200000

    Сам процесс обновления происходит в два этапа:

    После загрузки с раздела Recovery происходит обновление всех остальных разделов Android.

    И уже после перезагрузки и запуска новой версии Android происходит обновление раздела Recovery.

    При обновлении с использованием движка updater на первом этапе проверяется версия и цифровая подпись образа, поэтому откатить на старую версию ОС уже не получится.

    Обновиться по схеме Recovery можно как локально, выбрав в bootloader режим Recovery Mode и запустив движок обновления updater через меню Recovery Mode, либо удаленно, через OTA, когда приложение, работающее в Android, вызывает тот же updater из Java. И как раз при таком удаленном запуске можно организовать массовое обновление целой серии устройств. Этот вариант используют операторы цифрового ТВ при обновлении своих абонентских ТВ-приставок.

    Сам раздел Recovery при non-A/B-схеме обновления является физическим разделом во flash-памяти. С появлением A/B-схемы раздел Recovery переместился на RAM-диск в оперативной памяти устройства, но возможность сделать его отдельным физическим разделом также осталась.

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

    Одним из важных недостатков схемы Recovery или non-A/B System Updates является то, что при любом сбое во время обновления или битой прошивке мы получаем пусть и не «кирпич» (с раздела Recovery всё еще можно запустить устройство в Recovery Mode), но всё же не полнофункциональное и требующее восстановления устройство.

    С этим, видимо, решено было что-то делать, потому что следующим этапом эволюции системы обновления стало бесшовное обновление (seamless updates) или A/B-схема обновления.

    Бесшовное обновление или A/B-схема

    Эта возможность появилась в Android 7.0, она реализована в новом движке update_engine, который располагается в system/update_engine в дереве исходников AOSP.

    Главной особенностью A/B-схемы стало то, что в случае сбоев при обновлении можно загрузиться с предыдущей рабочей версии системы Android. Flash-память устройства содержит дублирующиеся системные разделы или слоты (slot A и B), отсюда и название — A/B system updates (вечная проблема с выбором названий). За выбор слота для загрузки (A или B) отвечает bootloader, анализируя состояние слотов.

    Принцип бесшовного обновления Android по A/B-схеме (активный раздел отмечен птичкой)

    Итак, как же происходит обновление:

    1) Загружая систему, например, со слотов A, мы скачиваем и прошиваем обновления на слоты B.

    2) После перезагрузки со слотов B мы проверяем работоспособность системы, и, если все ОК, сообщаем bootloader, что обновление прошло успешно.

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

    На официальном сайте для разработчиков — Android Source — этот процесс расписан более детально в 9 шагах, также там объясняется, как все работает после перезагрузки.

    Особенность бесшовной A/B-схемы обновление — это «съедение» большего объема flash-памяти. Насколько большего? Это можно оценить по приведенным ниже схемам разделов для Android 9.0. Как уже упоминалось ранее, разработчик может выбирать, какую из схем — A/B или non-A/B — применять в конфигурации системы.

    Карта разделов Android P (recovery)

    [mmcblk0p01] bootloader offset 0x000000000000, size 0x000000400000

    [mmcblk0p02] reserved offset 0x000002400000, size 0x000004000000

    [mmcblk0p03] cache offset 0x000006c00000, size 0x000046000000

    [mmcblk0p04] env offset 0x00004d400000, size 0x000000800000

    [mmcblk0p05] logo offset 0x00004e400000, size 0x000000800000

    [mmcblk0p06] recovery offset 0x00004f400000, size 0x000001800000

    [mmcblk0p07] misc offset 0x000051400000, size 0x000000800000

    [mmcblk0p08] dtbo offset 0x000052400000, size 0x000000800000

    [mmcblk0p09] cri_data offset 0x000053400000, size 0x000000800000

    [mmcblk0p10] param offset 0x000054400000, size 0x000001000000

    [mmcblk0p11] boot offset 0x000055c00000, size 0x000001000000

    [mmcblk0p12] rsv offset 0x000057400000, size 0x000001000000

    [mmcblk0p13] metadata offset 0x000058c00000, size 0x000001000000

    [mmcblk0p14] vbmeta offset 0x00005a400000, size 0x000000200000

    [mmcblk0p15] tee offset 0x00005ae00000, size 0x000002000000

    [mmcblk0p16] vendor offset 0x00005d600000, size 0x000040000000

    [mmcblk0p17] odm offset 0x00009de00000, size 0x000008000000

    [mmcblk0p18] system offset 0x0000a6600000, size 0x000050000000

    Читайте также:  Openvpn connect как пользоваться android

    [mmcblk0p19] product offset 0x0000f6e00000, size 0x00000800000

    [mmcblk0p01] bootloader offset 0x000000000000, size 0x000000400000

    [mmcblk0p02] reserved offset 0x000002400000, size 0x000004000000

    [mmcblk0p03] cache offset 0x000006c00000, size 0x000000000000

    [mmcblk0p04] env offset 0x000007400000, size 0x000000800000

    [mmcblk0p05] logo offset 0x000008400000, size 0x000000800000

    [mmcblk0p06] boot_a offset 0x000009400000, size 0x000001000000

    [mmcblk0p07] misc offset 0x00000ac00000, size 0x000000800000

    [mmcblk0p08] dtbo_a offset 0x00000bc00000, size 0x000000800000

    [mmcblk0p09] dtbo_b offset 0x00000cc00000, size 0x000000800000

    [mmcblk0p10] cri_data offset 0x00000dc00000, size 0x000000800000

    [mmcblk0p11] param offset 0x00000ec00000, size 0x000001000000

    [mmcblk0p12] boot_b offset 0x000010400000, size 0x000001000000

    [mmcblk0p13] rsv offset 0x000011c00000, size 0x000001000000

    [mmcblk0p14] metadata_a offset 0x000013400000, size 0x000001000000

    [mmcblk0p15] metadata_b offset 0x000014c00000, size 0x000001000000

    [mmcblk0p16] vbmeta_a offset 0x000016400000, size 0x000000200000

    [mmcblk0p17] vbmeta_b offset 0x000016e00000, size 0x000000200000

    [mmcblk0p18] tee offset 0x000017800000, size 0x000002000000

    [mmcblk0p19] vendor_a offset 0x00001a000000, size 0x000040000000

    [mmcblk0p20] vendor_b offset 0x00005a800000, size 0x000040000000

    [mmcblk0p21] odm_a offset 0x00009b000000, size 0x000008000000

    [mmcblk0p22] odm_b offset 0x0000a3800000, size 0x000008000000

    [mmcblk0p23] system_a offset 0x0000ac000000, size 0x000050000000

    [mmcblk0p24] system_b offset 0x0000fc800000, size 0x000050000000

    [mmcblk0p25] product_a offset 0x00014d000000, size 0x000008000000

    [mmcblk0p26] product_b offset 0x000155800000, size 0x000008000000

    [mmcblk0p27] data offset 0x00015e000000, size 0x000245e00000

    Если сравнить эти две конфигурации, то можно заметить, что раздел data при A/B-схеме меньше на 1,6 ГБ, и это цена дублирующихся системных разделов. Много это или мало — каждый решает сам, ориентируясь на характеристики своего устройства/проекта.

    Проект Treble

    Следующие изменения в системе обновления произошли в Android 8.0. Начиная с Android O (8.0) и продолжая в Android P (9.0), Google реализует свой проект Treble. Идея проекта состоит в том, чтобы упростить технологический процесс создания обновления для Android-устройства. Google предложил разделить с помощью неизменных интерфейсов части прошивки, созданием которых занимаются разные компании. Процесс разработки прошивки для конкретного девайса можно упрощенно разделить на следующие шаги:

    Команда Android создает новую версию своей OC.

    Разработчик чипа или системы на кристалле (Silicon Manufacturer) создает аппаратно-зависимые патчи для запуска этой версии Android на своих платах.

    И уже разработчики конечного устройства (Vendors) делают свою часть для реализации всех функций конкретного продукта для рынка электроники.

    Проект Treble разделяет ОС Android с дополнениями от производителей чипов/СнК и код разработчика конечного устройства, так что теперь операционная система может получать обновления без реализации изменений от производителя устройства.

    Разделение происходит как с помощью программного интерфейса (переход с Hardware Abstraction Layer 1.0 на HAL2.0), так и за счет выделения отдельных разделов на flash-памяти для Silicon Manufacturer и Vendor (выше в карте разделов Android 9.0 можно увидеть разделы odm, vendor, product).

    Переход с HAL1.0 на HAL2.0 заключается в отказе от прямого связывания с системными библиотеками. Вместо этого, используя IPC Binder, можно подключаться к системным сервисам.

    И еще одно небольшое, но полезное изменение: начиная с Android 8.0, в update_engine добавлена поддержка потоковых обновлений по A/B-схеме, в ходе которых идет прямая запись в слот B без необходимости промежуточного хранения данных в /data. Для таких потоковых обновлений практически не требуется временное хранилище, достаточно всего лишь 100 килобайт для сохранения метаданных.

    При этом необходимо, чтобы http-сервер, используемый для скачивания обновления, поддерживал HTTP range requests или другими словами докачку.

    Проект Mainline

    Следующим серьезным этапом в развитии системы обновления Android стал проект Mainline. Реализация этого проекта началась с Android 10.0 и продолжилась в текущем Android 11.0.

    Проект Mainline позволяет обновлять отдельные системные компоненты без обновления ОС целиком. Нужные данные загружаются через Google Play отдельно от OTA-обновления прошивки от производителя. Предполагается, что прямая доставка обновлений, не привязанных к оборудованию частей Android, позволит существенно сократить время получения обновлений, увеличить оперативность исправления уязвимостей и снизить зависимость от производителей устройств в поддержке безопасности ОС.

    Для реализации проекта Mainline выбранные компоненты системы Android преобразуются в модули. Часть этих модулей имеет старый формат APK, а часть конвертируется в новый APEX-формат, который отличается от APK возможностью применения на раннем этапе загрузки системы. На случай возможных сбоев предусмотрен режим отката изменений.

    С APEX-пакетами работает системный сервис APEX manager (apexd). Это нативный сервис, который после проверки распаковывает APEX-пакет в пользовательское пространство на диске и добавляет запись о нем в свою базу данных. При следующей загрузке системы APEX manager проверяет все пакеты из базы данных, создает loop-устройство для ext4-образа каждого APEX-пакета и монтирует его по пути /apex/name@ver.

    Модули с обновлениями изначально будут поставляться с открытым кодом, они будут сразу доступны в репозиториях AOSP (Android Open Source Project) и смогут включать улучшения и исправления, подготовленные сторонними участниками.

    В рамках проекта Mainline в Android 10 было добавлено 13 обновляемых модулей, а в Android 11 в дополнение к уже существующим прибавилось еще 11 модулей.

    Схема Virtual A/B

    Также в Android 11 к схемам non-A/B и A/B была добавлена схема Virtual A/B. Этот новый механизм обновления сочетает преимущества обоих предшественников, он обеспечивает устойчивое к сбоям обновление устройства, задействуя при этом минимальный объем flash-памяти. Это стало возможным благодаря созданию снимков файловой системы (snapshot) с использованием технологии Device-mapper (подсистема ядра Linux, позволяющая создавать виртуальные блочные устройства) и Dynamic Partitions.

    Dynamic Partitions — это система организации динамических разделов для Android. С ее помощью можно создавать, изменять размер или уничтожать разделы прямо в процессе обновления по воздуху (OTA). При использовании динамических разделов разработчикам больше не нужно беспокоиться о размере отдельных разделов, таких как system, vendor и product. Вместо них на устройстве выделяется суперраздел, внутри которого можно динамически изменять размер подразделов. Больше нет необходимости оставлять свободное пространство для будущих OTA-обновлений внутри отдельных образов разделов. Оставшееся свободное место в суперразделе теперь доступно для всех динамических подразделов.

    И в заключении последние слухи конца 2020 года — вишенка на торте. Google конвертирует Android Runtime в модуль Mainline. Android Runtime или ART — это среда выполнения Android-приложений, включающая компиляцию байт-кода приложения в машинные инструкции. Так что есть вероятность, что уже в Android 12 можно будет обновить ART через GooglePlay, установив APEX-пакет.

    Также, вероятно, система обновления Android мигрирует в Fuchsia, новую ОС Google, которая сейчас находится в процессе разработки. Они традиционно копируют удачные решения в своих программных продуктах. Так, например, update_engine для A/B-схемы, который применяется сейчас в Android, используется в еще одной ОC Google — Chrome OS. Или еще один пример: в Fuchsia предлагается библиотека Machina, которая позволяет запускать Linux-программы в специальной изолированной виртуальной машине по аналогии с тем, как организован запуск Linux-приложений в той же Chrome OS.

    Источник

    Оцените статью