Запускаем мобильные Flutter-приложения на компьютере

Разрабатываете мобильные Flutter-приложения? Рассказываем о проектах, которые позволят запустить их на настольных компьютерах.

Если вы разрабатываете приложения для смартфонов, то, возможно, слышали о новой среде разработки − Google Flutter. Это платформа, которая позволяет вам разрабатывать приложения с единой кодовой базой на гугловском языке Dart и публиковать их на Android и iOS платформы.

Кроме того, существует возможность запуска вашего Flutter-приложения на Windows, macOS и Linux, но пока только с помощью проектов сторонних разработчиков: раз и два. Оба построены на базе Flutter API, поэтому могут работать на системах вроде Fuchsia.

Также они оба используют OpenGL-библиотеку GLFW, которая предоставляет API для создания окон и обработки ввода с клавиатуры и мыши. Поэтому на платформе, где будет запускаться приложение, должны быть установлены драйверы для OpenGL.

Установка Flutter

Чтобы установить Flutter, выполните действия, перечисленные на официальной странице установки. Не забудьте добавить Flutter-переменную среды PATH.

Проект №1: Поддержка десктопов (Google)

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

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

Проект №2: Поддержка десктопов (Drakirus)

В репозитории проекта есть готовые файлы для тестирования настольных приложений, использующие уже скомпилированные исполняемые файлы.

Для запуска существующих проектов и реализации собственного Flutter-приложения сделайте следующее:

  1. Откройте доступ к файлам проекта.
  2. Загрузите демо-файл последней версии для вашей платформы из этого раздела.
  3. Распакуйте загруженный файл в любое место по вашему выбору.
  4. Запустите исполняемый файл stocks (macOS и Linux) или socks.exe (Windows) в корневом каталоге. Он будет работать как любое другое приложение, установленное в системе.

Примечание: в примерах на этой странице Flutter-приложения для MacOS могут загружаться с черного экрана. Решить проблему можно с увеличением размера экрана.

Запуск собственного проекта (с использованием предварительно скомпилированных файлов)

  1. Загрузите предварительно скомпилированный файл для вашей операционной системы здесь.
  2. Распакуйте содержимое.
  3. Отредактируйте файл config.json в папке шаблонов, изменив заданные параметры в соответствии с информацией о вашей среде и приложении:
  • FlutterPath: папка с установочными файлами
  • FlutterProjectPath: папка вашего проекта (разработанного во Flutter)
  • IconPath: путь к файлу иконки приложения на рабочем столе (можно сохранить значение по умолчанию)
  • ScreenHeight: высота окна приложения
  • ScreenWidth: ширина экрана приложения

Важно: на Windows прописывайте «\\» вместо «\» при указании пути к папке.

4. Запустите исполняемый файл flutter-desktop-template в macOS/Linux или flutter-desktop-template.exe на Windows. Запущенное приложение будет работать так же, как и остальные.

Загрузка собственного проекта (компиляция проекта Go Desktop)

  1. Загрузите и установите язык программирования Go отсюда.
  2. Установите gcc, если его нет на ПК. Для Windows лучше выбрать tdm64-gcc, для Mac подходит инструмент из командной строки Xcode, а в Linux обычно всё уже установлено.
  3. Загрузите и установите Git, если он не установлен в вашей системе.
  4. Создайте Flutter-проект с помощью команды flutter create или IDE.
  5. Добавьте следующее в файл main.dart:
import 'package:flutter/foundation.dart' show debugDefaultTargetPlatformOverride;

6. Добавьте следующий код в начало метода main (до вызова метода runApp) из файла main.dart:

debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;

7. В терминале выполните команду flutter build bundle в папке проекта Flutter − будет создан каталог с файлами, необходимыми для запуска.

8. Выполните команду go get -u github.com/go-gl/glfw/v3.2/glfw для загрузки библиотеки GLFW для языка Go (если что-то не получается, в конце статьи есть раздел, где мы объясняем, как устранить неполадки). Проконтролируйте наличие всех зависимостей из этого списка.

9. Загрузите десктопный пакет для Go.

10. Распакуйте содержимое загруженного файла.

11. Переименуйте папку, извлеченную из go-flutter-desktop-embedder-0.2.1-alpha, в go-flutter-desktop-embedder.

12. Скопируйте переименованную папку в src/github.com/Drakirus, которая должна быть создана в GOPATH.

13. Загрузите шаблон репозитория, разархивируйте загруженный файл в любую папку.

14. Загрузите библиотеку Flutter − Linux, MacOS, Windows, заменив жирный текст (хеш бета-версии 0.9.4) хешем той версии Flutter, которую вы используете в своем проекте. Посмотреть эту информацию можно в bin\internal\engine.version в папке проекта.

15. Разархивируйте загруженный файл и скопируйте libflutter_engine.so для Linux, FlutterEmbedder.framework (содержимое файла FlutterEmbedder.framework.zip в виде папки с именем FlutterEmbedder.framework) для macOS или flutter_engine.dll для Windows в папку, где находится файл main.go.

16. В терминале перейдите в папку go-flutter-desktop-embedder и выполните следующее: для Linux − export CGO_LDFLAGS="-L${PWD}", для macOS − export CGO_LDFLAGS="-F${PWD} -Wl,-rpath,@executable_path", для Windows − set CGO_LDFLAGS=-L%cd%. Не закрывайте окно терминала.

17. В этом же окне выполните команду go install в папке go-flutter-desktop-embedder. Все еще держите терминал открытым.

18. Отредактируйте файл config.json, так же, как делали ранее.

19. В том же терминале повторите шаг №16 и выполните команду go build, но теперь уже в папке с файлом main.go. В Windows используйте команду go build -ldflags -H=windowsgui, чтобы терминал не запускался вместе с приложением.

20. На этом этапе появится исполняемый файл, с именем, взятым из названия папки проекта, например, − flutter-desktop-template.exe.

21. Открытие файла запустит приложение.

Запомнить

  • Всякий раз, когда в проект Flutter вносятся какие-либо изменения, повторяйте шаг №7
  • Проект должен работать с той же версией Flutter, которую вы прописали в шаге №14
  • Всякий раз, когда вы вносите какие-либо изменения в файл config.json, повторяйте шаги №16 и №19.

Подготовка приложения к дистрибуции

Чтобы приложение можно было запускать на устройствах, где нет Flutter, выполните следующие действия:

  1. Убедитесь, что вы используете версию шаблона 1.1.0.
  2. Создайте папку для хранения всех файлов, необходимых для запуска вашего приложения.
  3. Включите в каталог приложения исполняемый файл flutter-desktop-template (Linux и macOS) или flutter-desktop-template.exe (Windows). Переименуйте исполняемый файл в соответствии с именем вашего приложения.
  4. Добавьте библиотеку Flutter в каталог приложения. Эта библиотека представляет собой файл libflutter_engine.so (Linux), папку FlutterEmbedder.framework (macOS) или файл flutter_engine.dll (Windows).
  5. Скопируйте файл config.json в папку приложения. Отредактируйте этот файл, очистив значения FlutterPath и FlutterProjectPath.
  6. Добавьте каталог assets и иконку приложения в общую папку. Может потребоваться изменение значения IconPath в config.json.
  7. Скопируйте в папку с приложением папку flutter_assets, расположенную в основной директории вашего проекта.
  8. Скопируйте файл icudtl.dat, расположенный в bin\cache\artifacts\engine\windows-x64 (Windows), bin/cache/artifacts/engine/linux-x64 (Linux) или bin/cache/artifacts/engine/darwin-x64 (macOS) в каталог приложения.
  9. В macOS может потребоваться упаковать каталог в соответствии со стандартами платформы, чтобы терминал не отображался вместе с приложением.

Возможные проблемы

В шаге №8 может вылезать подобное сообщение, игнорируйте его.

# github.com/go-gl/glfw/v3.2/glfw
In file included from ../../go-gl/glfw/v3.2/glfw/c_glfw_linbsd.go:24:0:
../../go-gl/glfw/v3.2/glfw/glfw/src/linux_joystick.c: In function ‘_glfwInitJoysticksLinux’:
../../go-gl/glfw/v3.2/glfw/glfw/src/linux_joystick.c:224:42: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 9 [-Wformat-truncation=]
 snprintf(path, sizeof(path), “%s/%s”, dirname, entry->d_name);
 ^~~~~~~
In file included from /usr/include/stdio.h:862:0,
 from /usr/include/X11/Xcursor/Xcursor.h:26,
 from ../../go-gl/glfw/v3.2/glfw/glfw/src/x11_platform.h:39,
 from ../../go-gl/glfw/v3.2/glfw/glfw/src/internal.h:169,
 from ../../go-gl/glfw/v3.2/glfw/glfw/src/x11_init.c:28,
 from ../../go-gl/glfw/v3.2/glfw/c_glfw_linbsd.go:19:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’ output between 12 and 267 bytes into a destination of size 20
 return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL — 1,
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 __bos (__s), __fmt, __va_arg_pack ());
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Заключение

В этой статье мы рассказали о двух проектах, которые позволяют запускать на компьютерах приложения, разработанные с помощью Flutter. Первый разработан в Google, но поддерживается сторонними разработчиками. Второй выполняет ту же задачу, но уже с применением Golang. Эти решения помогут в том случае, если нужно разработать приложения для разных платформ.

Понравилась статья о том, как запускать Flutter-приложения на десктопе? Возможно, вас заинтересует следующее:

Источник: Запускаем Flutter-приложения на десктопе на Medium

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ