React Native 64.0.3 集成Fresco模块启动崩溃求助
问题描述
- React Native 版本:64.0.3
- 目标SDK版本:31
- 故障现象:新版本上传至Google Play商店后出现崩溃,从Play Console获取到的崩溃日志如下:
1)Type java.lang.NoSuchMethodError Exception java.lang.NoSuchMethodError: at f.c.h.a.a.c.f at f.c.h.a.a.c.e at com.facebook.react.modules.fresco.FrescoModule.initialize at com.facebook.react.bridge.ModuleHolder.doInitialize at com.facebook.react.bridge.ModuleHolder.markInitializable at com.facebook.react.bridge.NativeModuleRegistry.notifyJSInstanceInitialized at com.facebook.react.bridge.CatalystInstanceImpl$2.run at android.os.Handler.handleCallback (Handler.java:751) at android.os.Handler.dispatchMessage (Handler.java:95) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage at android.os.Looper.loop (Looper.java:154) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run at java.lang.Thread.run (Thread.java:762) 2)Type com.facebook.react.common.c Exception com.facebook.react.common.c: at com.facebook.react.modules.core.ExceptionsManagerModule.reportException (ExceptionsManagerModule.java) at java.lang.reflect.Method.invoke (Method.java) at com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java) at com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java) at com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java) at android.os.Handler.handleCallback (Handler.java:938) at android.os.Handler.dispatchMessage (Handler.java:99) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java) at android.os.Looper.loopOnce (Looper.java:238) at android.os.Looper.loop (Looper.java:349) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java) at java.lang.Thread.run (Thread.java:920)
解决方案
1. 升级Fresco依赖版本
RN 0.64.x默认集成的Fresco版本与Android 12(SDK31)存在方法兼容问题,需升级到兼容版本(如2.5.0或更高):
- 打开
android/build.gradle文件,修改ext中的frescoVersion:
buildscript { ext { minSdkVersion = 21 compileSdkVersion = 31 targetSdkVersion = 31 // 替换为兼容的Fresco版本 frescoVersion = "2.5.0" } // ... 其他配置 }
- 执行缓存清理与依赖重装:
cd android && ./gradlew clean rm -rf node_modules && yarn install npx react-native run-android
2. 修复混淆规则(若启用R8/ProGuard)
如果项目开启了代码混淆,需确保Fresco相关类未被错误混淆,在android/app/proguard-rules.pro中添加:
-keep class com.facebook.fresco.** { *; } -keep class com.facebook.imagepipeline.** { *; } -keep class com.facebook.react.modules.fresco.** { *; }
3. 调整Fresco初始化顺序
部分场景下模块初始化顺序会触发崩溃,可尝试手动初始化Fresco:
- 打开
android/app/src/main/java/[你的包名]/MainApplication.java:
import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.react.ReactApplication; // ... 其他导入 public class MainApplication extends Application implements ReactApplication { @Override public void onCreate() { super.onCreate(); // 提前初始化Fresco Fresco.initialize(this); SoLoader.init(this, /* native exopackage */ false); // ... 其他初始化代码 } // ... 其他方法 }
内容的提问来源于stack exchange,提问作者kawsar ahmad
相关产品推荐
相关产品推荐

