Перейти к основному содержимому

Expo

Разработчику Архитектору Инженеру

Expo

Expo удобно читать как "ускоритель старта". Материал особенно полезен, если нужно:

  • быстро показать рабочий прототип на телефоне без сложной нативной настройки;
  • проверить продуктовую гипотезу до полной сборочной инфраструктуры;
  • постепенно перейти от Expo Go к development build без смены стека.

Где применяют Expo

Expo — самый быстрый вход в React Native — без Xcode/Android Studio на старте, QR-код, OTA-обновления. Когда нужны "голые" нативные модули — dev build / prebuild.

Пошаговый гайд: Первая программа на Expo. Основа RN: Первая программа на React Native.

Expo — это набор инструментов и сервисов, созданный для упрощения процесса разработки мобильных приложений под платформы iOS и Android. Технология базируется на фреймворке React Native, позволяя разработчикам использовать JavaScript или TypeScript для создания нативных интерфейсов. Экосистема Expo предоставляет готовую инфраструктуру, которая скрывает сложность настройки окружения, компиляции исходного кода и управления зависимостями операционных систем.

Разработка с использованием Expo позволяет писать код один раз и запускать его на различных устройствах без необходимости глубокого погружения в специфику каждой платформы. Архитектура решения включает в себя клиентскую часть, работающую непосредственно на устройстве пользователя, и облачные сервисы, обеспечивающие сборку, тестирование и публикацию приложений. Основной принцип работы строится на использовании модулей, которые взаимодействуют с аппаратными возможностями смартфона через специальные API.

Создание приложения на Expo начинается с установки базового инструмента командной строки. Этот инструмент управляет жизненным циклом проекта, создаёт структуру файлов, устанавливает необходимые зависимости и запускает сервер разработки. Разработчик получает возможность видеть изменения в коде в реальном времени на подключённом физическом устройстве или эмуляторе. Процесс не требует установки сложных сред разработки, таких как Xcode или Android Studio, на начальном этапе обучения.


Особенности технологии и архитектура

Экосистема Expo разделяет процесс разработки на две основные части: клиентское приложение и серверную часть сборки. Клиентская часть работает в среде JavaScript, используя движок Hermes или JSC (JavaScriptCore) для выполнения кода. Серверная часть отвечает за компиляцию байт-кода в нативные библиотеки (.so файлы для Android и .framework для iOS).

Архитектура приложения строится вокруг концепции модульности. Каждый компонент интерфейса представляет собой отдельный элемент, который можно комбинировать с другими для создания сложного пользовательского опыта. Данные передаются между компонентами через состояние (state) и пропсы (props). Состояние хранит текущее значение переменной и автоматически обновляет интерфейс при изменении данных. Пропсы передают данные от родительских компонентов к дочерним.

Взаимодействие с аппаратным обеспечением смартфона происходит через систему модулей. Эти модули представляют собой обёртки над нативными функциями операционной системы. Например, модуль камеры открывает доступ к оптическому датчику изображения, а модуль геолокации использует GPS-чип для определения координат. Разработчик вызывает методы модулей через JavaScript, и система автоматически переводит эти вызовы на язык, понятный операционной системе.

Существует два основных режима работы с проектом: Expo Go и Managed Workflow. Режим Expo Go позволяет запускать приложение прямо на смартфоне без предварительной сборки. Это идеальный вариант для быстрого прототипирования и обучения. Приложение загружает код из сети и исполняет его в специальном контейнере. Для более продвинутых задач требуется режим Managed Workflow, где проект компилируется в полноценное нативное приложение. Этот процесс требует наличия специализированного оборудования или использования облачных сервисов для сборки.

Режим Expo Go функционирует как виртуальная машина, которая загружает JavaScript-код и необходимые модули в реальном времени с сервера разработчика. Это позволяет запускать приложение на физическом устройстве без необходимости предварительной компиляции нативных кодов (Java/Kotlin для Android или Objective-C/Swift для iOS). При изменении исходного файла в редакторе кода сервер автоматически отправляет обновлённую версию скрипта на телефон, что приводит к мгновенному отображению изменений на экране через механизм горячей перезагрузки. Пользователь может тестировать логику приложения, взаимодействовать с интерфейсом и проверять работу API прямо во время написания кода, не затрачивая время на длительные циклы сборки и установки. Такой подход идеально подходит для быстрой итерации идей, отладки пользовательского опыта и обучения основам React Native, так как исключает необходимость настройки сложных сред разработки и управления нативными зависимостями на начальном этапе.

Управление зависимостями в Expo осуществляется через пакетный менеджер npm или yarn. Библиотеки добавляются в файл конфигурации проекта, после чего система автоматически скачивает и связывает их с основным кодом. Система версионирования гарантирует совместимость всех установленных компонентов. При обновлении ядра Expo разработчик получает уведомления о необходимых изменениях в коде.

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


Установка компонентов и настройка окружения

Первый шаг в создании приложения на Expo — установка необходимого программного обеспечения. Основная задача сводится к установке Node.js, среды выполнения JavaScript, и глобального пакета Expo CLI. Node.js необходим для работы с пакетным менеджером и выполнения скриптов. Версия должна быть LTS (Long Term Support), что гарантирует стабильность работы.

После установки Node.js (LTS) перезапустите терминал и проверьте окружение:

node -v
npm install -g expo-cli
expo --version

Создание и запуск первого проекта:

npx create-expo-app my-first-app
cd my-first-app
npx expo start

npx expo start поднимает dev-сервер с QR-кодом для Expo Go. Изменения в App.js подхватываются hot reload. Остановка — Ctrl+C.

Для нативных модулей дополнительно понадобятся Xcode (macOS) или Android Studio. На телефон установите Expo Go (App Store / Google Play) для сканирования QR-кода.


Структура проекта и управление зависимостями

Проект Expo имеет чёткую структуру папок и файлов. Корневая директория содержит файл package.json, который описывает метаданные проекта и зависимости. Файл app.json определяет конфигурацию приложения, включая название, иконку и настройки платформ. Директория src часто используется для организации исходного кода по логическим блокам. Файл babel.config.js настраивает преобразование кода перед компиляцией.

Зависимости делятся на производственные и развивающие. Производственные библиотеки необходимы для работы приложения в продакшене. Развивающие пакеты используются только во время написания кода, например, линтеры или тестовые фреймворки. Список зависимостей хранится в секциях dependencies и devDependencies файла package.json. Установка и восстановление зависимостей:

npx expo install <имя_пакета>
npx expo install # после клонирования репозитория

package-lock.json фиксирует точные версии для одинакового окружения на разных машинах. Не нужно вручную указывать версии версий в большинстве случаев.

Модульность проекта позволяет разделять код на отдельные компоненты. Компоненты могут находиться в одной папке или быть разнесены по разным директориям. Импорт компонентов осуществляется через относительные пути. Путь указывает на расположение файла относительно текущего. Правильная организация файлов упрощает поиск и поддержку кода.

Конфигурация приложения настраивается через файл app.json. Здесь задаётся название приложения, которое отображается на экране запуска. Указывается версия приложения, цвет фона и иконка. Настройки платформ позволяют включить или отключить поддержку конкретных функций. Например, можно запретить использование камеры или микрофона.


Запуск и тестирование на устройствах

Подключение устройства к проекту требует наличия активного интернет-соединения. Телефон и компьютер должны находиться в одной локальной сети, либо телефон должен иметь доступ к интернету для загрузки кода через облачный сервер. Сканирование QR-кода камерой телефона открывает ссылку, которая соединяет устройство с сервером разработки.

Тестирование на реальном устройстве даёт наиболее точную картину работы приложения. Эмуляторы могут некорректно отображать поведение сенсорного экрана или работу с датчиками. Реальное устройство проверяет производительность, потребление памяти и работу батареи. Разработчик видит, как приложение ведёт себя при потере сигнала или низком заряде.

Отладка кода производится через встроенные инструменты браузера. В терминале появляется ссылка на Chrome DevTools, которую можно открыть для просмотра логов и ошибок. Переменные состояния отображаются в режиме реального времени. Можно ставить точки останова и просматривать стек вызовов. Это позволяет находить проблемы в логике работы программы.

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

Приложение Expo Go поддерживает автоматическое обновление. При изменении кода на компьютере телефон получает уведомление и перезагружает приложение. Процесс занимает несколько секунд. Разработчик не должен каждый раз запускать приложение заново. Это значительно ускоряет цикл разработки.


Сборка и публикация приложения

Финальная сборка приложения превращает код в формат, пригодный для распространения в магазинах приложений. Для этого используется сервис EAS Build. Он принимает проект, компилирует его на удалённых серверах и выдаёт готовые бинарные файлы. Процесс не требует мощного компьютера разработчика.

Сборка через EAS:

eas login
eas build --platform android # или ios; тип сборки — в мастере

Файл конфигурации eas.json определяет параметры сборки. Здесь указывается профиль, версия SDK и настройки подписи. Подпись приложения необходима для того, чтобы магазины приложений доверяли коду. Сервис автоматически генерирует ключи подписи или позволяет использовать свои.

После завершения сборки появляются ссылки на скачивание файлов. Для Android это файл формата APK или AAB. Для iOS — файл IPA. Файлы можно загрузить в TestFlight для iOS или Google Play Console для Android. Магазины приложений проводят проверку соответствия правилам и выпускают приложение пользователям.

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

Подпись release, RuStore, Google Play и раздача APK с сайта: Публикация Android-приложения.


Локальная сборка и expo prebuild

Expo упрощает разработку (Expo Go, hot reload), но release на Android всё равно опирается на Gradle, Hermes и часто NDK — как и голый React Native. Expo Go скрывает нативную сборку; как только нужны кастомные модули или локальный APK, появляется полная цепочка из статьи о сборке.

Команда npx expo prebuild генерирует каталоги android/ и ios/ из конфигурации app.json / app.config.js. Дальше Gradle собирает уже сгенерированный проект — это удобно, но структура меняется при обновлении SDK, и конфликты в android/ после ручных правок решаются через повторный prebuild или аккуратный config plugin.

Типичные боли на Windows при локальной сборке:

  • длинные пути через node_modules → ошибка 260 символов;
  • JDK 21 вместо слишком новой Java (24);
  • после смены New Architecture или ABI — ./gradlew clean в android/;
  • один ABI (arm64-v8a) для тестового APK на физическом устройстве.

Если в проекте есть скрипт вроде npm run build:apk с обходом ограничений Windows — для повседневной работы предпочтительнее его, чем ручной вызов Gradle из глубокого пути. Для команд без локального Android-стека остаётся EAS Build в облаке.

Сравнение с более "склеенными" стеками — .NET MAUI (MSBuild, один SDK) и Unity (сборка из редактора).


Частые ошибки

СимптомПричина
Expo Go не подключаетсяРазные Wi‑Fi / нужен tunnel (npx expo start --tunnel)
Module not foundПакет требует dev build, не Expo Go
QR не открываетсяСтарая камера iOS — введите URL вручную в Expo Go
OTA не примениласьКэш — перезапуск с очисткой
Gradle / NDK на WindowsДлинный путь, JDK — см. Сборка и развёртывание мобильных приложений
android/ "сломался" после обновленияnpx expo prebuild --clean или согласовать с config plugins

Что попробовать

  1. Первая программа Expo.
  2. expo-router — файловая навигация.
  3. eas build -p android — первая store-сборка.