Pull to refresh
99.41
Friflex
Мобильные приложения для миллионов пользователей🚀

Как подключиться к Flutter приложению в режиме нативного debug на ОС Аврора

Level of difficultyHard
Reading time4 min
Views2.5K

Привет, Хабр! Меня зовут Юрий Петров, я Flutter Team Lead в Friflex и автор ютуб-канала «Юрий Петров | Всё об IT». Мы разрабатываем мобильные приложения для бизнеса и специализируемся на Flutter. А также мы делаем  свой вклад в развитие экосистемы Аврора + Flutter. В этой статье хочу рассказать про то, как можно подключиться к нативной части ОС Авроры для тестирования нативной части Flutter-приложения.

История

Совсем недавно, команда из ОМП (Открытая мобильная платформа) объявила, что смогла портировать Flutter для создания приложений под систему Аврора. Так же, есть классный доклад Дениса Глазкова на конференции CorssConf про это. За что, конечно, им честь и хвала. На самом деле, ребята из ОМП провели очень большую работу.

Но вернемся к земным проблемам. Для портирование Flutter приложений которые уже написаны, необходимо портировать нативные плагины. И здесь мы уперлись в проблему, что нет возможности тестировать нативную часть плагина в режиме debug. И это очень сильно замедляло разработку плагинов. Крайне трудно портировать большие плагины, к примеру, такие как location или push_notification, не имея возможности подключаться к нативной части для тестирования. 

Но решение есть. Для него нам потребуется следующее:

  1. Внешний отладчик gdb-multiarch 

  2. Плагины 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

Немного поясню по команде, в строке:

  1. Обращаемся к aurora_psdk и к его инструменту для подписания.

  2. Путь к ключу.

  3. Путь к сертификату.

  4. Путь к папке, где лежат 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. Теперь мы можем тестировать нативную часть плагинов.

Результат работы:

Нативная отладка

Если что-то не получается, то можно клонировать проект по ссылке и попробовать.

Tags:
Hubs:
Total votes 8: ↑8 and ↓0+8
Comments2

Articles

Information

Website
friflex.com
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
Friflex_dev