如何将我的应用程序从 expo 弹出到裸反应本机代码
Posted
技术标签:
【中文标题】如何将我的应用程序从 expo 弹出到裸反应本机代码【英文标题】:How can I eject my app from expo to bare react native code 【发布时间】:2021-02-17 02:29:25 【问题描述】:我使用 expo cli 制作了一个应用程序,现在我希望它弹出以响应本机。我使用命令“expo 弹出”来弹出应用程序。当我给 npm run android 时,应用程序没有成功构建并且有很多错误。我尝试解决它们,但没有一个解决方案对我有用。
> delivery-app-fe@1.0.0 android D:\projects\delivery-app-fe
react-native run-android
info 运行 jetifier 将库迁移到 AndroidX。您可以使用“--no-jetifier”标志禁用它。 Jetifier 找到 1335 个文件来转发-jetify。使用 8 名工人... info 正在启动 JS 服务器... info 正在安装应用程序...
配置项目:app
安装单模块: 来自 D:\projects\delivery-app-fe\node_modules@unimodules\core 的 unimodules-core@5.3.0 来自 D:\projects\delivery-app-fe\node_modules@unimodules\react-native-adapter 的 unimodules-react-native-adapter@5.4.0 来自 D:\projects\delivery-app-fe\node_modules\expo-app-auth 的 expo-app-auth@9.1.1 来自 D:\projects\delivery-app-fe\node_modules\expo-constants 的 expo-constants@9.1.1 来自 D:\projects\delivery-app-fe\node_modules\expo-error-recovery 的 expo-error-recovery@1.2.1 来自 D:\projects\delivery-app-fe\node_modules\expo-file-system 的 expo-file-system@9.0.1 来自 D:\projects\delivery-app-fe\node_modules\expo-font 的 expo-font@8.2.2 来自 D:\projects\delivery-app-fe\node_modules\expo-image-loader 的 expo-image-loader@1.1.1 来自 D:\projects\delivery-app-fe\node_modules\expo-keep-awake 的 expo-keep-awake@8.2.1 来自 D:\projects\delivery-app-fe\node_modules\expo-linear-gradient 的 expo-linear-gradient@8.2.1 来自 D:\projects\delivery-app-fe\node_modules\expo-location 的 expo-location@8.2.1 来自 D:\projects\delivery-app-fe\node_modules\expo-permissions 的 expo-permissions@9.0.1 来自 D:\projects\delivery-app-fe\node_modules\expo\node_modules\expo-splash-screen 的 expo-splash-screen@0.5.0 来自 D:\projects\delivery-app-fe\node_modules\expo-sqlite 的 expo-sqlite@8.2.1 来自 D:\projects\delivery-app-fe\node_modules\expo-updates 的 expo-updates@0.2.14 来自 D:\projects\delivery-app-fe\node_modules\unimodules-app-loader 的 unimodules-app-loader@1.2.0 来自 D:\projects\delivery-app-fe\node_modules\unimodules-barcode-scanner-interface 的 unimodules-barcode-scanner-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-camera-interface 的 unimodules-camera-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-constants-interface 的 unimodules-constants-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-face-detector-interface 的 unimodules-face-detector-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-file-system-interface 的 unimodules-file-system-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-font-interface 的 unimodules-font-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-image-loader-interface 的 unimodules-image-loader-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-permissions-interface 的 unimodules-permissions-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-sensors-interface 的 unimodules-sensors-interface@5.2.1 unimodules-task-manager-interface@5.2.1 来自 D:\projects\delivery-app-fe\node_modules\unimodules-task-manager-interface
发现一些重复的 unimodule 包。安装版本号最高的。 确保项目的以下依赖项解析为一个特定版本: 世博会闪屏
任务:unimodules-core:compileDebugJavaWithJavac
任务:expo-constants:compileDebugJavaWithJavac
任务:expo-app-auth:compileDebugJavaWithJavac
任务:expo-file-system:processDebugManifest D:\projects\delivery-app-fe\node_modules\expo-file-system\android\src\main\AndroidManifest.xml:10:9-21:20 警告: provider#expo.modules.filesystem.FileSystemFileProvider@android:authorities 在 AndroidManifest.xml:10 处被标记为替换 其他声明,但没有其他声明
任务:expo-file-system:compileDebugJavaWithJavac
任务:expo-image-loader:compileDebugKotlin w: D:\projects\delivery-app-fe\node_modules\expo-image-loader\android\src\main\java\expo\modules\imageloader\ImageLoaderModule.kt: ( 11, 42): 'SimpleTarget
' 已弃用。在 Java 中已弃用 w: D:\projects\delivery-app-fe\node_modules\expo-image-loader\android\src\main\java\expo\modules\imageloader\ImageLoaderModule.kt: ( 83, 22): 'SimpleTarget ' 已弃用。在 Java 中已弃用
任务:expo-location:compileDebugJavaWithJavac
任务:expo-sqlite:compileDebugJavaWithJavac
任务:expo-updates:compileDebugJavaWithJavac Gradle 可能会禁用增量编译,因为以下注释处理器不是增量的:room-compiler-2.1.0.jar (andr oidx.room:room-compiler:2.1.0)。 考虑在 gradle.properties 文件中设置实验特性标志 android.enableSeparateAnnotationProcessing=true 来运行 在单独的任务中进行注释处理并使编译增量。
任务:react-native-community_async-storage:compileDebugJavaWithJavac
任务:react-native-community_datetimepicker:compileDebugJavaWithJavac
任务:react-native-gesture-handler:compileDebugJavaWithJavac
任务:react-native-reanimated:compileDebugJavaWithJavac
任务:react-native-screens:compileDebugJavaWithJavac
任务:app:processDebugManifest 失败
有关清单合并的更多信息,请参阅http://g.co/androidstudio/manifest-merger。
w:在 build\kotlin\sessions 检测到多个 Kotlin 守护进程会话
此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。 使用“--warning-mode all”显示各个弃用警告。 见https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings 460 个可操作的任务:460 个已执行 注意:某些输入文件使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\expo-constants\android\src\main\java\expo\modules\constants\ConstantsService.java 使用 s 或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\expo-app-auth\android\src\main\java\expo\modules\appauth\AppAuthModule.java 使用 unch 受限制或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\expo-file-system\android\src\main\java\expo\modules\filesystem\FileSystemModule.java 使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\expo-location\android\src\main\java\expo\modules\location\taskConsumers\GeofencingTas kConsumer.java 使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\expo-sqlite\android\src\main\java\expo\modules\sqlite\SQLiteModule.java 使用 unchecke d 或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules@react-native-community\async-storage\android\src\main\java\com\reactnativecommunity asyncstorage\AsyncStorageModule.java 使用或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 注意:某些输入文件使用或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react \RNGestureHandlerButtonViewManager.java 使用或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 注意:某些输入文件使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\react-native-reanimated\android\src\main\java\com\swmansion\reanimated\NodesManager.j ava 使用或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 注意:D:\projects\delivery-app-fe\node_modules\react-native-reanimated\android\src\main\java\com\swmansion\reanimated\NodesManager.j ava 使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 注意:某些输入文件使用或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 注意:某些输入文件使用未经检查或不安全的操作。 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。 D:\projects\delivery-app-fe\android\app\src\debug\AndroidManifest.xml 错误: AndroidManifest.xml 中的属性 data@scheme 需要占位符替换,但 is 没有值 提供。
FAILURE:构建失败并出现异常。
出了什么问题: 任务“:app:processDebugManifest”执行失败。清单合并失败:AndroidManifest.xml 中的属性 data@scheme 需要占位符替换,但未提供值。
尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 到 ge t 完整的见解。
通过https://help.gradle.org获得更多帮助
在 51 秒内构建失败
错误 无法安装应用程序。确保您已设置 Android 开发环境:https://reactnative.dev/docs/environ
心理设置。使用 --verbose 标志运行 CLI 以获取更多详细信息。
错误:命令失败:gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
注意:某些输入文件使用未经检查或不安全的操作。
npm 错误!代码生命周期
npm 错误!错误号 1
npm 错误!交付-app-fe@1.0.0 安卓:react-native run-android
npm 错误!退出状态 1
npm 错误!
npm 错误!在 delivery-app-fe@1.0.0 android 脚本中失败。
npm 错误!这可能不是 npm 的问题。上面可能还有额外的日志输出。
npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Users\arihant\AppData\Roaming\npm-cache_logs\2020-11-04T11_31_04_493Z-debug.log
D:\projects\delivery-app-fe>
【问题讨论】:
【参考方案1】:您应该运行“expo 弹出”进行弹出,然后按照以下链接中定义的步骤进行操作:
见:https://docs.expo.io/expokit/expokit/
【讨论】:
以上是关于如何将我的应用程序从 expo 弹出到裸反应本机代码的主要内容,如果未能解决你的问题,请参考以下文章
将 Expo Project 弹出到 Bare React Native 时出错