Что учесть при адаптации приложения для Авроры
Инструкция от тимлида Friflex Дмитрия МозераАврора — это российская операционная система. Она основана на ядре Linux. Авроре уже более шести лет, но развивалась она по большей части инфраструктурно и была рассчитана на сегменты B2G и B2B.
Почти все приложения на Авроре — внутренние сервисы различных организаций и ведомств. Например, там есть приложения для почтальонов и ремонтно-восстановительных бригад РЖД.
В августе 2023 года компания ОМП опубликовала Flutter SDK с начальной поддержкой ОС Аврора. На российской ОС появились «пользовательские» приложения. Например, у «Билайна», Энергогаранта и ВТБ (правда, у ВТБ оно пока в тестировании). Ожидается, что их станет больше, когда на Авроре заработает RuStore.
Архитектура Авроры
Если посмотреть на архитектуру Авроры, можно найти много общего с Android. Есть слой приложений, слои аппаратных абстракций или HAL (Hardware Abstraction Layer) с Kernel, Common API.
Нативный стек у Авроры — это QT. То есть в случае дальнейшей разработки и поддержки надо быть готовым хотя бы немножко писать на C++. Рано или поздно придется создавать что-то свое, как и на Android c iOS.
Аврора и Flutter
Сейчас ОС Аврора поддерживает уже три версии Flutter: 3.3.10, 3.13.5 и 3.16.2. В 3.16.2 добавили поддержку TextureView. То есть теперь можно писать свои плагины, которые предполагают использование камеры или видеоплеера. Несколько важных моментов, на которые советую обратить внимание:
- Поддерживаются только специальные версии движка. Не получится как обычно скачать Flutter c официального сайта, придется устанавливать форк. И помнить при этом, что Аврора поддерживает лишь ограниченное число версий фреймворка.
- На старых версиях Авроры (до версии 4.0.2.303, она же 4.0.2 Update 5) нужны пакеты совместимости. Их придется скачивать самостоятельно и закидывать на телефон. В новой версии Авроры все работает из коробки.
- Реализованы не все Platform API. Это значит, что вы должны быть готовы искать обходные пути. От некоторых функций, возможно, придется отказаться.
- Режим отладки или Flutter Debug не работает «из коробки». Это замедляет разработку: все приходится каждый раз компилировать вручную, отправлять и смотреть, как работает.
Это все очень напоминает мне историю о том, как Unity портировали на Nintendo Switch. У разработчиков были те же проблемы. Цикл разработки продвигался очень медленно, потому что не было поддержки режима отладки. Приходилось создавать маленькое приложение и на нем все тестировать. И только потом интегрировать в основное приложение.
Вам понадобятся устройства
Аврора не будет работает на любом устройстве, даже если его перепрошить. Вам понадобятся смартфоны и планшеты Aquarius, Масштаб, F+, БайтЭрг и Qtech. Их не купить в обычном магазине: продают их только напрямую.
Скорее всего, вам нужно будет два устройства. Аврора 4, наверное, будет поддерживаться еще год, и Аврора 5 — на подходе. Ждать устройство придется неделю или больше.
Посмотрите на свой компьютер
Это Mac? Плохие новости — Аврора не поддерживает процессоры М-серии. Только Windows с WSL или Linux. Хорошие новости — это можно обойти с помощью VS Code remote. Вы можете сделать хост-машину со всем необходимым для работы с Авророй и удаленно к ней подключаться. Будет тот же опыт, а работать можно даже на Mac.
Какие есть плагины
Плагины, которые созданы на уровне самой операционной системы. Например, диплинки и интенты.
Плагины категории embedder, разработанные Flutter-командой Авроры. К ним можно отнести камеру, WebView, PDF.
Плагины, которые может создать любой желающий. Например, мы сделали геолокацию и push-уведомления.
Что вы не сможете использовать
Если у вас в зависимостях есть что-то вроде WebView, PDF или Firebase, вам придется как-то это обходить. Может быть, даже отказаться от портирования и подумать о нативной версии на QT.
С Google-сервисами и Store API тоже пока сложно. Если в вашем приложении нужно что-то покупать, с этим будет сложно. RuStore для Авроры пока еще в разработке. TextureView уже есть, но вам потребуется много усилий.
Если вы решили идти дальше, проще всего использовать Null object pattern. Делаем абстрактный класс, который на Android и iOS будет вызывать определенное API, а на Авроре просто не будет ничего делать. Это довольно просто сделать, и поток кода у вас почти не изменится.
Завершающий чек-лист
В качестве заключения предлагаю короткий чек-лист. Если вы собираетесь адаптировать мобильное приложение для ОС Аврора, убедитесь, что вы:
- готовы закупать устройства и ждать их;
- готовы доработать для поддержки доступной Flutter-версии;
- готовы мигрировать с Firebase;
- не разрабатываете платное приложение или готовы ждать RuStore;
- можете обойтись без PlatformView и некоторых API системы;
- готовы писать на C++;
Большое преимущество — разработчики из Авроры по-настоящему помогают. Это сильно мотивирует и помогает.