Вопрос или проблема
Приложение вылетает, как только запускается в эмуляторе Android, даже не отображая содержимое страницы app.tsx.
Сборка приложения успешна, но Logcat показывает некоторые фатальные исключения:
ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: main
Процесс: com.valhalla, PID: 26240
java.lang.RuntimeException: Невозможно получить провайдер com.google.mlkit.common.internal.MlKitInitProvider: java.lang.ClassNotFoundException: Класс “com.google.mlkit.common.internal.MlKitInitProvider” не найден по пути: DexPathList[[zip файл “/data/app/~~A7kyXyor_Na1MF7n5uEUNg==/com.valhalla-GpphL_ikUmkO2EFehLIkSQ==/base.apk”]
Мое приложение – это простое нативное React-приложение, и недавно я установил expo-core-modules
, оно все еще работало, но как только я установил expo-camera
, проблема с вылетом началась.
dependencies
:
"react": "18.2.0",
"react-native": "0.74.5",
"expo": "^51.0.0",
"expo-camera": "\~15.0.16"
devdependencies
:
"@types/react": "\~18.2.79",
"typescript": "\~5.3.3"
engines:
"node": "\>=18"
Точная версия экспо: 51.0.38
Я заметил на других форумах, что люди упоминали об обновлении зависимостей, что помогло им. Я обновил все зависимости Expo до последней версии.
Я пробовал сборку приложения на эмуляторе Android API 34 и 35 на двух разных ноутбуках с одинаковыми версиями и зависимостями. Также пробовал на старом физическом устройстве Android API 27 (Oneplus 3 в рабочем состоянии). Поведение абсолютно одинаково для всех трех случаев, т.е. приложение открывается и сразу же вылетает.
Как только я возвращаю исходный код в состояние до установки expo-camera, т.е. обратно к expo-core-modules, приложение снова работает для всех трех случаев (эмулятор/физическое устройство), упомянутых выше.
Ответ или решение
Почему ваше приложение React (Bare Native) аварийно завершает работу при установке expo-camera?
При запуске приложения React (Bare Native) на эмуляторе Android возникают серьезные проблемы, которые проявляются в виде аварийного завершения работы приложения. Это явление, которое вы наблюдаете, может быть связано с несколькими факторами, связанными с совместимостью зависимостей или конфигурацией приложения.
Подробный разбор проблемы
Ваше приложение работает с «expo-core-modules», однако после инсталляции «expo-camera» возникает фатальная ошибка:
FATAL EXCEPTION: main
Process: com.valhalla, PID: 26240
java.lang.RuntimeException: Unable to get provider com.google.mlkit.common.internal.MlKitInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.mlkit.common.internal.MlKitInitProvider" on path: DexPathList[[zip file ...
Данные о зависимостях вашего проекта:
"dependencies": {
"react": "18.2.0",
"react-native": "0.74.5",
"expo": "^51.0.0",
"expo-camera": "~15.0.16"
},
"devDependencies": {
"@types/react": "~18.2.79",
"typescript": "~5.3.3"
},
"engines": {
"node": ">=18"
}
Потенциальные причины аварийного завершения
-
Несоответствие версий библиотек: Хотя вы обновили все зависимости, важно убедиться, что версии библиотек, таких как Expo и Expo-camera, совместимы друг с другом. Например, может потребоваться более новая версия некоторых библиотек, включая Google ML Kit, чтобы соответствовать требованиям expo-camera. Проверьте официальную документацию по совместимости.
-
Ошибки конфигурации Android: Исходя из сообщения об ошибке, проблема связана с инициализацией провайдера Google ML Kit. Убедитесь, что в вашем проекте настроены необходимые зависимости для работы этого компонента. Вам, возможно, потребуется добавить некоторые зависимости в
android/app/build.gradle
, например:dependencies { implementation 'com.google.mlkit:image-labeling:17.0.0' implementation 'com.google.mlkit:common:17.0.0' }
-
Кэш и сборка: Проблемы могут возникать из-за состояния кэша или некорректной сборки. Попробуйте выполнить команду:
cd android ./gradlew clean
Затем перезапустите сборку вашего проекта.
-
Модули платформы: Возможно, у вас установлен неправильный модуль платформы, который не поддерживает вашу целевую версию Android (API 34 и 35). Проверьте поддержку требуемых вами версий в официальной документации.
Что делать дальше?
-
Обновите изменения в зависимостях. Если вы еще не сделали этого, убедитесь, что все зависимости, особенно те, что относятся к библиотекам Google и Expo, обновлены до последних стабильных версий.
-
Проверка кода. Внимательно просмотрите код вашего приложения на наличие потенциально конфликтующих импорта или неправильно настроенных компонентов, которые могут вызвать сбой инициализации.
-
Тестирование на разных устройствах. Убедитесь, что проблема имеется не только на эмуляторах, но и на физическом устройстве. Это поможет изолировать проблему.
-
Обратитесь к сообществу. Если все вышеуказанные шаги не помогли, опубликуйте детальное описание проблемы на форумах, таких как Stack Overflow или GitHub Issues репозитория Expo. Сообщество может дать полезные советы или известие об аналогичных проблемах.
Тем самым, следуя этим рекомендациям, вы сможете устранить проблему с аварийным завершением работы вашего React приложения после установки expo-camera и наладить его стабильную работу на Android.