因Google要求API Level 31,升级Expo SDK 44至46后遇异常
问题描述
我用Expo SDK 44开发的应用提交Google Play时被驳回,原因是API Level仅为30,不符合平台要求的31版本。调研后升级到Expo SDK 46,结果出现异常报错,已经花3天排查仍未解决。
package.json配置
{ "main": "node_modules/expo/AppEntry.js", "scripts": { "setup": "./scripts/setup.sh", "start": "expo start", "android": "expo start --android", "ios": "expo start --ios", "eject": "expo eject" }, "dependencies": { "@astrocoders/react-native-selectable-text": "^1.5.1", "@babel/preset-typescript": "^7.16.7", "@react-native-community/blur": "^3.6.0", "@react-native-community/masked-view": "0.1.10", "@react-native-community/netinfo": "9.3.0", "@react-native-community/slider": "4.2.3", "@react-native-firebase/app": "~15.4.0", "api-ecommerce": "^1.0.3", "babel-preset-env": "^1.7.0", "base-64": "1.0.0", "body-parser": "^1.20.0", "consolidate": "^0.16.0", "crypto-js": "4.1", "currency-formatter": "1.5.9", "ejs": "^3.1.7", "expo": "^46.0.0", "expo-ads-admob": "~12.0.1", "expo-ads-facebook": "~11.1.1", "expo-app-loading": "~2.1.0", "expo-apple-authentication": "~4.3.0", "expo-asset": "~8.6.1", "expo-av": "~12.0.4", "expo-constants": "~13.2.4", "expo-facebook": "~12.1.1", "expo-file-system": "~14.1.0", "expo-font": "~10.2.0", "expo-linear-gradient": "~11.4.0", "expo-notifications": "~0.16.1", "expo-permissions": "~13.2.0", "expo-status-bar": "~1.4.0", "expo-updates": "~0.14.6", "expo-web-browser": "~11.0.0", "express": "^4.18.1", "firebase": "9.7.0", "html-entities": "2.3.3", "htmlparser2": "^8.0.1", "jetifier": "^2.0.0", "lodash": "^4.17.21", "moment": "^2.29.3", "native-base": "^3.4.4", "node": "^17.7.2", "oauth-1.0a": "^2.2.6", "path": "0.12.7", "paypal-rest-sdk": "^1.8.1", "prop-types": "^15.8.1", "radio-buttons-react-native": "^1.0.4", "react": "18.0.0", "react-instantsearch": "6.24.1", "react-native": "0.69.5", "react-native-animatable": "1.3.3", "react-native-app-intro-slider": "4.0.4", "react-native-clean-form": "0.5.0", "react-native-code-push": "^7.0.4", "react-native-collapsible": "1.6.0", "react-native-country-picker-modal": "2.0.0", "react-native-drawer": "git+https://github.com/luyx2412/react-native-drawer.git", "react-native-fluid-slider": "1.0.2", "react-native-image-zoom-viewer": "3.0.1", "react-native-iphone-x-helper": "^1.3.1", "react-native-keyboard-aware-scroll-view": "0.9.5", "react-native-loading-spinner-overlay": "^2.0.0", "react-native-masked-text": "1.13.0", "react-native-measure-text": "^1.0.0-alpha.2", "react-native-modal": "^13.0.1", "react-native-modal-with-blur-support-background": "^1.0.0", "react-native-modalbox": "^2.0.2", "react-native-modals": "^0.22.3", "react-native-multi-select-picker": "^1.0.11", "react-native-multi-selectbox": "^1.5.0", "react-native-paper": "4.12.1", "react-native-parallax": "0.3.0", "react-native-paypal-gateway": "^1.0.0", "react-native-paypal-lib": "^1.0.9", "react-native-progress": "^5.0.0", "react-native-progress-circle": "^2.1.0", "react-native-progress-wheel": "^1.0.5", "react-native-radio-buttons": "1.0.0", "react-native-rate": "^1.2.9", "react-native-really-awesome-button": "^1.6.0", "react-native-reanimated": "~2.9.1", "react-native-render-html": "^6.3.4", "react-native-restart": "^0.0.24", "react-native-safe-area-context": "4.3.1", "react-native-screens": "~3.15.0", "react-native-scrollable-tab-view": "1.0.0", "react-native-side-menu": "1.1.3", "react-native-sliding-modal": "^2.1.0", "react-native-snap-carousel": "3.9.1", "react-native-spacer": "^1.7.0", "react-native-star-rating": "1.1.0", "react-native-svg": "12.3.0", "react-native-swipe-list-view": "3.2.9", "react-native-swiper": "^1.6.0", "react-native-tag-select": "^2.0.0", "react-native-unordered-list": "^1.0.4", "react-native-webview": "11.23.0", "react-native-webview-messaging": "^2.0.0-alpha.4", "react-navigation": "^4.4.4", "react-navigation-header-buttons": "9.0.1", "react-navigation-props-mapper": "3.1.0", "react-navigation-stack": "^2.10.4", "react-navigation-tabs": "^2.11.2", "react-redux": "8.0.1", "react-smart-payment-buttons": "^0.2.3", "redux": "4.2.0", "redux-actions": "2.6.5", "redux-persist": "^5.10.0", "redux-thunk": "2.4.1", "reselect": "4.1.5", "sweetalert2": "^11.4.10", "tcomb-form-native": "0.6.20", "urijs": "^1.19.11", "url": "0.11.0", "url-parse": "^1.5.10", "util": "0.12.4", "uuid": "8.3.2", "validate.js": "0.13.1", "wpapi": "^1.2.2" }, "devDependencies": { "@babel/preset-react": "^7.16.7", "babel-jest": "28.0.3", "babel-plugin-transform-remove-console": "6.9.4", "babel-preset-expo": "~9.2.0", "babel-preset-react-native": "4.0.1", "eslint-config-airbnb": "^19.0.4", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react-hooks": "^4.5.0", "jest": "^26.6.3", "reactotron-react-native": "^5.0.1", "reactotron-redux": "3.1.3" }, }
报错信息
报错截图1

报错截图2

排查建议
- 第三方库兼容性检查:Expo SDK 46对应React Native 0.69.5和React 18,部分旧库可能不兼容。比如
react-navigation4.x版本较老,和React 18存在冲突,建议升级到react-navigation 6.x;@react-native-firebase/app15.4.0需确认是否适配SDK 46,可参考官方文档的版本匹配表。 - 清理缓存重装依赖:执行
expo r -c清除Expo缓存,删除node_modules和package-lock.json,然后重新运行npm install,避免缓存导致的依赖冲突。 - 调整Babel配置:SDK 46默认使用
babel-preset-expo ~9.2.0,babel-preset-react-native4.0.1可能和当前预设冲突,尝试移除该依赖后重新打包。 - 定位具体报错代码:截图显示的是Metro打包错误,查看终端完整日志,找到报错的具体文件和代码行,比如是否有库使用了React 18已废弃的API(如
ReactDOM.render)。 - 处理Git依赖:
react-native-drawer使用的是GitHub仓库地址,确认该仓库是否有适配RN 0.69和React 18的分支,或者替换为维护活跃的替代库。
内容的提问来源于stack exchange,提问作者Ayoub Mafkoud
相关产品推荐
相关产品推荐

