Expo集成react-native-stripe-terminal后Android构建失败:mergeReleaseJavaResource任务出现文件路径冲突
我之前也碰到过这个一模一样的问题!确实是react-native-stripe-terminal依赖的com.stripe:stripeterminal-taptopay:4.5.1和项目里的org.bouncycastle:bcprov-jdk15to18:1.78.1两个库,同时包含了路径为org/bouncycastle/pqc/crypto/picnic/lowmcL5.bin.properties的文件,导致Android构建时的merge任务报错。
你之前尝试的exclude: ["org/bouncycastle/*"]之所以没用,是因为这个配置会把整个BouncyCastle相关文件都排除掉,但Stripe终端库本身需要依赖其中的部分文件,直接排除会导致功能异常。正确的做法是精准处理冲突的单个文件,而不是一刀切排除整个目录。
下面是两种经过验证的解决方案:
方案一:通过expo-build-properties配置pickFirst规则
修改你的app.json(或app.config.js)里的expo-build-properties插件配置,针对冲突的具体文件添加pickFirst规则,告诉构建工具遇到重复文件时优先选择其中一个:
"plugins": [ [ "expo-build-properties", { "android": { "minSdkVersion": 26, "packagingOptions": { "pickFirst": [ "org/bouncycastle/pqc/crypto/picnic/lowmcL5.bin.properties", "META-INF/NOTICE.md", "META-INF/LICENSE.md" ] } } } ] ]
方案二:统一BouncyCastle依赖版本
另一种思路是强制所有依赖使用同一个版本的BouncyCastle库,避免版本和文件冲突:
- 如果你用的是npm 8+,在
package.json里添加overrides:
"overrides": { "org.bouncycastle:bcprov-jdk15to18": "1.78.1" }
- 如果你用的是Yarn,在
package.json里添加resolutions:
"resolutions": { "org.bouncycastle:bcprov-jdk15to18": "1.78.1" }
最后别忘了清除缓存
修改配置后,一定要先清除构建缓存,避免旧配置影响:
# 清除Expo预构建缓存 npx expo prebuild --clean # 或者如果已经预构建过Android项目,直接清除Gradle缓存 cd android && ./gradlew clean && cd ..
之后再重新运行Android构建命令(比如eas build --platform android或npx expo run:android --variant release),应该就能顺利通过mergeReleaseJavaResource任务了。
内容来源于stack exchange

