Сборка Expo EAS Android APK зависает на «Bundle JS (0/1)» при использовании expo-router (Metro никогда не завершает рабоAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сборка Expo EAS Android APK зависает на «Bundle JS (0/1)» при использовании expo-router (Metro никогда не завершает рабо

Сообщение Anonymous »

Я пытаюсь собрать Android APK с помощью EAS Build для проекта Expo + React Native, но сборка постоянно зависает на этапе «Объединение JS» и никогда не завершается.
Использована команда

Код: Выделить всё

eas build -p android --profile apk
Что происходит
  • Сборка проходит нормально через этапы установки зависимостей и предварительной сборки.
  • Она зависает на неопределенное время на этапе «Объединение JS», показывая 0/1. Это изображение моего журнала.
  • Журнал останавливается на этапе объединения:

Код: Выделить всё

Starting Metro Bundler
Android node_modules/expo-router/entry.js ░░░░░░░░░░░░░░░░  0.0% (0/1)
  • Никаких ошибок не возникает — он просто никогда не прогрессирует.
  • Тот же проект отлично работает на:

    Эмуляторе Android
  • Expo Go
[*]

Код: Выделить всё

npx expo-doctor
сообщает нет проблем.


Среда
  • Expo SDK: 54
  • expo-router: ~6.0.21
  • React Native: 0.81.5
  • Включена новая архитектура
  • EAS CLI: >= 16.28.0
  • Платформа: Android (сборка APK)
Это мой package.json

Код: Выделить всё

{
"name": "app",
"version": "1.0.1",
"main": "expo-router/entry",
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"test": "jest --coverage",
"bundle": "expo export --platform android"
},
"dependencies": {
"@expo/metro-runtime": "~6.1.2",
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/datetimepicker": "8.4.4",
"@react-navigation/native": "^7.1.8",
"@sentry/react-native": "~7.2.0",
"expo": "^54.0.30",
"expo-constants": "~18.0.12",
"expo-image-picker": "~17.0.10",
"expo-linking": "~8.0.11",
"expo-notifications": "~0.32.15",
"expo-router": "~6.0.21",
"expo-secure-store": "~15.0.8",
"expo-status-bar": "~3.0.9",
"expo-system-ui": "~6.0.9",
"expo-updates": "~29.0.15",
"expo-web-browser": "~15.0.10",
"jwt-decode": "^4.0.0",
"nativewind": "^4.2.1",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-native": "0.81.5",
"react-native-dropdown-picker": "^5.4.6",
"react-native-elements": "^3.4.3",
"react-native-gesture-handler": "~2.28.0",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
"react-native-pager-view": "6.9.1",
"react-native-reanimated": "~4.1.1",
"react-native-safe-area-context": "~5.6.0",
"react-native-screens": "~4.16.0",
"react-native-tab-view": "^4.2.2",
"react-native-web": "^0.21.0",
"react-native-worklets": "0.5.1",
"react-native-worklets-core": "^1.6.2",
"tailwindcss": "^3.4.15",
"zod": "^3.23.8",
"zustand": "^5.0.0"
},
"devDependencies": {
"@babel/core": "^7.25.2",
"@types/react": "~19.1.0",
"jest": "^29.7.0",
"jest-expo": "~54.0.16",
"typescript": "~5.9.2"
},
"private": true,
"extra": {
"expoClient": {
"hostType": "lan"
}
}
}
Это мой Metro.config.js

Код: Выделить всё

const { getDefaultConfig } = require('expo/metro-config');
const { withNativeWind } = require('nativewind/metro');

const config = getDefaultConfig(__dirname);
config.watchFolders = [];
config.server = {
enhanceMiddleware: (middleware) =>  middleware,
};
module.exports = withNativeWind(config, { input: './global.css' });
Это мой eas.json (я скрываю часть API)

Код: Выделить всё

{
"cli": {
"version": ">= 16.28.0",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"channel": "development",
"env": {
"EXPO_PUBLIC_API_URL": "HIDDEN"
}
},
"preview": {
"distribution": "internal",
"channel": "preview"
},
"apk": {
"android": {
"buildType": "apk"
},
"cache": {
"disabled": false
},
"channel": "production",
"env": {
"EXPO_PUBLIC_API_URL": "HIDDEN",
"EXPO_NO_METRO_WATCHER": "1",
"CI": "true"
}
},
"production": {
"android": {
"buildType": "apk"
},
"channel": "production",
"cache": {
"disabled": false
},
"env": {
"EXPO_NO_METRO_WATCHER": "1",
"CI": "true"
}
}
},
"submit": {
"production": {}
}
}
Это мой app.json

Код: Выделить всё

{
"expo": {
"name": "App",
"slug": "App",
"scheme": "myapp",
"version": "1.0.1",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"newArchEnabled": true,
"splash": {
"image": "./assets/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.yourname.app"
},
"android": {
"package": "com.yourname.app",
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"edgeToEdgeEnabled": true,
"predictiveBackGestureEnabled": false
},
"web": {
"favicon": "./assets/favicon.png"
},
"extra": {
"eas": {
"projectId": "HIDDEN",
"apiUrl": "process.env.EXPO_PUBLIC_API_URL"
}
},
"updates": {
"enabled": false
},
"runtimeVersion": {
"policy": "appVersion"
},
"plugins": [
//"expo-font",
"expo-router"
// "@sentry/react-native",
]
}
}
Что я пробовал
  • Запуск npx expo-doctor (проблем не обнаружено)
  • Очистка кешей и восстановление
  • Отключение Metro Watcher через EXPO_NO_METRO_WATCHER=1
  • Подтверждение работы приложения в Expo Go и эмуляторе Android
  • Настройка Metro.config.js
  • Удаление несвязанных зависимостей (без эффекта)
Вопрос
Почему EAS Build зависает на «Bundle JS (0/1)» при сборке Android APK с помощью expo-router, хотя приложение работает нормально локально?
Известна ли эта проблема с:
  • Expo SDK 54
    />
  • Новая архитектура
  • expo-router
  • Упаковщик Metro в среде CI/EAS?
Будем признательны за любые рекомендации или известные исправления.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -router-me
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»