RN 0.62.2切换Hermes替代JSC编译报错D8重复类问题求助
解决React Native 0.62.2切换Hermes时的Dex重复类错误
这个问题我之前在帮同事排查RN项目切换Hermes的问题时刚好碰到过,本质是依赖冲突导致的重复类问题,下面几个方法亲测有效,你可以挨个试试:
方法1:排除重复的Renderscript依赖
问题出在多个依赖包同时引入了androidx.renderscript库,导致打包时出现类重复。你可以在android/app/build.gradle的dependencies块里,给相关依赖添加排除规则:
dependencies { // 先给RN核心依赖排除重复库 implementation (project(':react-native')) { exclude group: 'androidx.renderscript', module: 'renderscript' } // 如果你的项目里还有其他第三方库也引入了renderscript,比如某些UI组件或原生模块,也需要同样添加exclude // 举个例子: // implementation ('com.example:some-third-party-lib:2.0.0') { // exclude group: 'androidx.renderscript', module: 'renderscript' // } }
方法2:强制统一Renderscript版本
如果排除依赖的方式没效果,可以尝试在android/build.gradle的allprojects块里,强制指定所有依赖使用同一个版本的renderscript,避免版本不一致导致的冲突:
allprojects { repositories { // 你的仓库配置(比如google()、mavenCentral()这些) } configurations.all { resolutionStrategy { // 这里指定一个和RN 0.62.2兼容的版本,比如1.1.0 force 'androidx.renderscript:renderscript:1.1.0' } } }
方法3:彻底清理缓存后重新构建
有时候旧的构建缓存会残留冲突的依赖文件,导致问题一直存在,执行以下命令彻底清理:
# 清理RN项目缓存 npx react-native clean # 进入Android目录清理Gradle缓存 cd android && ./gradlew clean # 返回根目录重新构建项目 cd .. && npx react-native run-android
方法4:检查Hermes配置是否正确
确保你在android/app/build.gradle里正确开启了Hermes,没有多余的手动配置:
project.ext.react = [ enableHermes: true, // 确认这里是true,开启Hermes // 其他配置比如entryFile、bundleAssetName等保持默认即可 ]
如果你之前手动添加过Hermes的依赖包,记得删掉,RN 0.62.x版本已经自带Hermes相关依赖,手动添加会导致冲突。
一般来说,方法1+方法3组合使用就能解决这个问题,如果还是不行,再试试方法2强制统一版本。
内容的提问来源于stack exchange,提问作者Yossi
相关产品推荐
相关产品推荐

