React Native Android启动崩溃:java.lang.NoSuchMethodError问题求助
React Native Android应用启动崩溃问题
问题描述
基于React Native开发的Android应用,此前数月多次更新均正常运行,近期突然出现启动崩溃,完全无法启动。应用预期流程为启动至主界面,自动登录后跳转首页,但目前直接崩溃,仅抛出以下错误。
错误日志
FATAL EXCEPTION: main Process: com.appname.appname, PID: 30423 java.lang.NoSuchMethodError: No interface method removeLast()Ljava/lang/Object; in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /apex/com.android.art/javalib/core-oj.jar) at com.swmansion.rnscreens.ScreenStack.obtainDrawingOp(ScreenStack.kt:319) at com.swmansion.rnscreens.ScreenStack.drawChild(ScreenStack.kt:303) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317) at com.swmansion.rnscreens.ScreenStack.dispatchDraw(ScreenStack.kt:288) at android.view.View.updateDisplayListIfDirty(View.java:22747) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4540) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4513) at android.view.View.updateDisplayListIfDirty(View.java:22712) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:694) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:700) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:798) at android.view.ViewRootImpl.draw(ViewRootImpl.java:4939) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4643) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3822) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2465) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9305) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1339) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1348) at android.view.Choreographer.doCallbacks(Choreographer.java:952) at android.view.Choreographer.doFrame(Choreographer.java:882) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1322) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
build.gradle配置
buildToolsVersion = "34.0.0" minSdkVersion = 24 compileSdkVersion = 35 targetSdkVersion = 35 ndkVersion = "26.1.10909125" kotlinVersion = "1.8.0" supportLibVersion = "28.0.0" androidXAnnotation = "1.1.0" androidXBrowser = "1.0.0"
package.json依赖
"dependencies": { "@miblanchard/react-native-slider": "^2.6.0", "@pusher/pusher-websocket-react-native": "^1.3.0", "@react-native-async-storage/async-storage": "^1.23.1", "@react-native-community/netinfo": "^9.5.0", "@react-native-cookies/cookies": "^6.2.1", "@react-native-firebase/app": "^19.2.2", "@react-native-firebase/auth": "^19.2.2", "@react-native-firebase/messaging": "^19.3.0", "@react-native/metro-config": "^0.74.84", "@react-navigation/bottom-tabs": "^6.5.20", "@react-navigation/native": "^6.1.17", "@react-navigation/native-stack": "^6.9.26", "@reduxjs/toolkit": "^2.2.3", "@rneui/themed": "^4.0.0-rc.8", "@sharpsports/sharpsports-mobile": "2.5.0", "@types/react-router": "^5.1.20", "axios": "^1.6.8", "core-js": "^3.36.1", "firebase": "^10.11.0", "lodash": "^4.17.21", "react": "18.2.0", "react-native": "0.74.2", "react-native-chart-kit": "^6.12.0", "react-native-collapsible": "^1.6.1", "react-native-config": "^1.5.2", "react-native-device-info": "^10.13.2", "react-native-gesture-handler": "^2.17.1", "react-native-gifted-charts": "^1.4.10", "react-native-iap": "^12.15.0", "react-native-linear-gradient": "^2.8.3", "react-native-reanimated": "^3.13.0", "react-native-safe-area-context": "4.10.1", "react-native-screens": "3.31.1", "react-native-svg": "^15.3.0", "react-native-typescript-transformer": "^1.2.13", "react-native-webview": "^13.10.3", "react-redux": "^9.1.0", "redux-persist": "^6.0.0", "tailwind-rn": "^4.2.0", "zod": "^3.22.4" },
解决方案
错误核心是java.util.List.removeLast()方法不存在,该方法是Java 9新增的API,但你的minSdkVersion=24(对应Android 7.0,仅支持Java 8)。问题出在react-native-screens@3.31.1版本中使用了这个不兼容的API。
解决步骤:
- 降级react-native-screens版本:将
react-native-screens降级到3.29.0或更早版本(该版本未使用removeLast()方法)。修改package.json中的依赖:
"react-native-screens": "3.29.0"
- 清理缓存并重新安装依赖:
rm -rf node_modules rm package-lock.json npm install cd android && ./gradlew clean cd .. npx react-native run-android
- 验证修复:重新编译运行应用,确认启动崩溃问题是否解决。
内容的提问来源于stack exchange,提问作者Andrew Colin
相关产品推荐
相关产品推荐

