添加react-native-image-metadata后遇:app:transformClassesWithJarMergingForDebug失败求助
transformClassesWithJarMergingForDebug的重复类错误 我之前在集成react-native-image-metadata时也碰到过一模一样的问题,这个错误的核心原因是你的项目里有两个不同的依赖包同时引入了com.drewnoakes:metadata-extractor库,导致打包时出现重复的com/drew/imaging/ImageMetadataReader.class文件——和multiDexEnabled完全无关,multiDex是用来解决方法数超限的问题,对重复类冲突起不到作用。
下面是我亲测有效的解决步骤:
第一步:定位重复依赖来源
先通过Gradle命令查看项目的依赖树,找出哪个额外的依赖也引入了这个库:./gradlew app:dependencies在输出结果里搜索
metadata-extractor或者com.drew,你会看到至少两个依赖条目指向这个库,其中一个来自react-native-image-metadata,另一个可能是你项目里的其他图片处理类库、原生模块等。第二步:排除重复的依赖
找到重复的依赖后,在app/build.gradle的dependencies块中,给那个重复引入的依赖添加排除规则。举个例子,如果发现react-native-image-picker也引入了这个库,就修改它的依赖声明:implementation project(':react-native-image-picker') { exclude group: 'com.drewnoakes', module: 'metadata-extractor' }如果是远程maven依赖,写法类似:
implementation('com.example:some-third-party-lib:1.2.3') { exclude group: 'com.drewnoakes', module: 'metadata-extractor' }第三步:强制统一库版本(备选方案)
如果不确定哪个依赖重复,或者排除后出现其他问题,可以在项目根目录的build.gradle中强制所有依赖使用同一个版本的metadata-extractor,建议选择react-native-image-metadata依赖的版本:subprojects { configurations.all { resolutionStrategy.force 'com.drewnoakes:metadata-extractor:2.16.0' // 替换为实际依赖的版本号 } }第四步:清理缓存并重建
完成上述操作后,执行清理命令再重新编译:./gradlew clean ./gradlew assembleDebug
一般来说,做完这些步骤就能解决重复类的打包错误了。
内容的提问来源于stack exchange,提问作者Rashmi

