react native 出現 FATAL EXCEPTION: OkHttp Dispatcher
報錯信息
FATAL EXCEPTION: OkHttp DispatcherProcess: , PID: 8868java.lang.NoSuchMethodError: No virtual method toString(Z)Ljava/lang/String; in class Lokhttp3/Cookie; or its super classes (declaration of 'okhttp3.Cookie' appears in /data/app/~~jJHvA-QIVyqleQgWxDDo2A==/com.bestwond.bigapp-BKzRyAI_ofmJB2eguJfYAA==/base.apk)
錯誤原因
你的項目中至少有兩個不同的庫分別依賴了不同大版本的 OkHttp:
1.React Native 本身:新版本的 RN (>= 0.63) 通常依賴 OkHttp 4.x。
2.某個第三方庫:你安裝的某個第三方庫(如 react-native-webview, @react-native-community/netinfo, 或其他網絡相關的庫)依賴了舊的 OkHttp 3.x。
編譯時一切正常,但運行時手機只加載了一個版本的 OkHttp(通常是舊版本),導致 RN 網絡模塊找不到它需要的新版本中的方法(這里是 Cookie.toString(Z) 方法),從而引發 NoSuchMethodError 致命異常。
解決方案
解決方案:強制統一 OkHttp 版本
你需要在你項目的 android/app/build.gradle 文件中,強制所有依賴都使用同一個版本的 OkHttp。
請按照以下步驟操作:
1.打開文件:找到你 React Native 項目中的 android/app/build.gradle 文件。
2.添加配置:在 dependencies 塊中,在最前面添加以下強制依賴解析策略:
dependencies {// !!! 強制統一 OkHttp 版本,解決 FATAL EXCEPTION !!! implementation(platform("com.squareup.okhttp3:okhttp-bom:4.10.0")) // 使用BOM統一管理版本implementation("com.squareup.okhttp3:okhttp")implementation("com.squareup.okhttp3:okhttp-urlconnection")implementation("com.squareup.okhttp3:logging-interceptor")// !!! 結束 !!!// ... 你原有的其他依賴項implementation("com.facebook.react:react-android")implementation("org.webkit:android-jsc:+")// ... 其他 project(...) 依賴
}