Как подключиться к Flutter приложению в режиме нативного debug на ОС Аврора
Привет, Хабр! Меня зовут Юрий Петров, я Flutter Team Lead в Friflex и автор ютуб-канала «Юрий Петров | Всё об IT». Мы разрабатываем мобильные приложения для бизнеса и специализируемся на Flutter. А также мы делаем свой вклад в развитие экосистемы Аврора + Flutter. В этой статье хочу рассказать про то, как можно подключиться к нативной части ОС Авроры для тестирования нативной части Flutter-приложения.
История
Совсем недавно, команда из ОМП (Открытая мобильная платформа) объявила, что смогла портировать Flutter для создания приложений под систему Аврора. Так же, есть классный доклад Дениса Глазкова на конференции CorssConf про это. За что, конечно, им честь и хвала. На самом деле, ребята из ОМП провели очень большую работу.
Но вернемся к земным проблемам. Для портирование Flutter приложений которые уже написаны, необходимо портировать нативные плагины. И здесь мы уперлись в проблему, что нет возможности тестировать нативную часть плагина в режиме debug. И это очень сильно замедляло разработку плагинов. Крайне трудно портировать большие плагины, к примеру, такие как location или push_notification, не имея возможности подключаться к нативной части для тестирования.
Но решение есть. Для него нам потребуется следующее:
Внешний отладчик gdb-multiarch
Плагины VScode Native Debug и работы с языком C++ C/C++ Extension Pack
P.S. Будет много консольных команд, но деваться некуда. Если нет желания читать, то можно посмотреть видео версию.
Собираем приложение в режиме debug
Как установить и настроить flutter-aurora, можете посмотреть подробную видео инструкцию на нашем канале здесь, здесь и здесь.
Для примера будем использовать проект flutter_plugins. Этот репозиторий содержит плагины Flutter для платформы ОС Аврора.
Клонируем проект:
https://gitlab.com/omprussia/flutter/flutter-plugins.git
В папке с проектом запускаем в терминале команды — для перехода в папку example, вызов pub get и кодогенерацию:
cd example
flutter-aurora pub get
dart run build_runner build --delete-conflicting-outputs
Теперь собираем rpm (с таким расширением собирается билд в системе Аврора) в режиме debug.
flutter-aurora build aurora --debug
В итоге у нас есть три rpm, собранных в режиме debug.
Теперь нам необходимо их подписать, для подписи будем использовать тестовый ключ и сертификат. Скачать их можно тут. Скачиваем и копируем в папку sign в корень папки пользователя. Например, у меня это /home/dev/sign.
Далее вызываем команду для подписания пакетов:
aurora_psdk rpmsign-external sign \
--key $HOME/sign/regular_key.pem
--cert $HOME/sign/regular_cert.pem \
$HOME/flutter-plugins/example/build/aurora/aurora-arm/debug/RPMS/*.rpm
Немного поясню по команде, в строке:
Обращаемся к aurora_psdk и к его инструменту для подписания.
Путь к ключу.
Путь к сертификату.
Путь к папке, где лежат debug билды.
Если процесс подписания успешно пройден, то в консоли увидите следующую информацию:
Отлично, теперь копируем наши сборки в смартфон.
Вызываем команду для копирования, где указываем, что все рпм, которые находятся в папке builds, необходимо перенести на смартфон в папку Downloads.
scp $HOME/flutter-plugins/example/build/aurora/aurora-arm/debug/RPMS/*.rpm defaultuser@192.168.2.15:/home/defaultuser/Downloads
В консоли можно наблюдать такую картинку.
Осталось установить приложение на смартфоне и запустить.
Подключаемся к смартфону через ssh:
ssh defaultuser@192.168.2.15
Переходим в режим суперпользователя:
devel-su
Запускаем установку всех пакетов rpm в папке Downloads:
pkcon install-local /home/defaultuser/Downloads/*.rpm -y
Результат успешной установки:
Выходим из суперпользователя:
exit
Запускаем gdb сервер:
gdbserver --multi :10006
Важно: запомните порт, на котором будет запущен gdbserver, в нашем случае это 10006.
Если сервер запустился без ошибок, то в консоли увидим:
В смартфоне убедились, что приложение установлено и работает.
Скриншоты с телефона
Далее переходим к установке отладчика.
Если в системе не установлен gdb, необходимо установить следующей командой:
Установка и настройка отладчика
Если в системе не установлен gdb, необходимо установить следующей командой:
sudo apt install gdb-multiarch
Далее добавляем плагины Native Debug C/C++ Extension Pack в VScode. Для этого переходим в раздел "Extensions" и находим нужные плагины.
Extensions
Создаем в корне проекта файл .gdbinit для инициализации gdb. И добавляем в него следующую информацию:
set remote exec-file /usr/bin/ru.auroraos.flutter_example_packages
Это файл для инициализации gdb, в нем указан путь к установленному приложению на смартфоне. Если вы используете другое название пакета, то тут укажите свое.
Далее создаем конфигурационный файл для запуска:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach with GDB",
"type": "cppdbg",
"request": "launch",
"program": "./example/build/aurora/aurora-arm/debug/ru.auroraos.flutter_example_packages",
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb-multiarch",
"miDebuggerServerAddress": "192.168.2.15:10005",
"useExtendedRemote": true,
"cwd": "${workspaceRoot}",
}
]
}
Выбираем конфигурацию для запуска: Attach with GDB. И подключаемся к смартфону в режиме debug. Теперь мы можем тестировать нативную часть плагинов.
Результат работы:
Нативная отладка
Если что-то не получается, то можно клонировать проект по ссылке и попробовать.