Build Failure: Duplicate Resources Error During AAR Packaging with React Native Libraries
I'm experiencing a build failure when trying to create an AAR file using the React Native Brownfield plugin. The build process fails with a "Duplicate resources" error during the packageDebugResources task.
Error Details: Execution failed for task ':rnbrownfieldLibrary:packageDebugResources'.
[color/red] */brownfield-test/react-native-brownfield/android/rnbrownfieldLibrary/build/intermediates/exploded-aar/rnbrownfield/react-native-video/unspecified/debug/res/values/values.xml [color/red] */brownfield-test/react-native-brownfield/android/rnbrownfieldLibrary/build/intermediates/exploded-aar/rnbrownfield/react-native-firebase_messaging/unspecified/debug/res/values/values.xml: Error: Duplicate resources
Environment:
- React Native Brownfield Plugin:
@callstack/react-native-brownfield@^1.2.0 - React Native Version:
0.77.2 - Android Compile SDK:
35 - Min SDK:
24 - Build Tool: Gradle with Kotlin DSL
Steps to Reproduce:
- Clone this example repo
https://github.com/hidaeraldo/brownfield-test -
cd react-native-brownfieldfolder - Install
react-native-videoand@react-native-firebase/messagingas dependencies - Attempt to build the AAR file using
./gradlew publishToMavenLocalor similar command - Build fails during the
packageDebugResourcestask
Current Configuration:
The issue occurs in the rnbrownfieldLibrary module with the following build.gradle.kts configuration:
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("com.facebook.react")
id("com.callstack.react.brownfield")
`maven-publish`
}
react {
autolinkLibrariesWithApp()
}
Dependencies Involved:
-
react-native-video: ^6.16.1 -
@react-native-firebase/messaging: ^21.4.1
Actual Behavior: Build fails with duplicate resources error, preventing the AAR from being generated.
Workaround Attempts:
- Tried adding resource exclusions in the
packagingblock but the issue persists - The error occurs even with the default autolinking configuration
Thanks for raising this. I will look into this over a few days 👍
packaging { jniLibs { if (!hermesEnabled) { excludes += "lib/x86/libjsctooling.so" excludes += "lib/x86_64/libjsctooling.so" excludes += "lib/armeabi-v7a/libjsctooling.so" excludes += "lib/arm64-v8a/libjsctooling.so" }
// Pick first libworklets.so to resolve conflicts between
// react-native-reanimated and react-native-worklets
pickFirsts += "lib/armeabi-v7a/libworklets.so"
pickFirsts += "lib/arm64-v8a/libworklets.so"
pickFirsts += "lib/x86/libworklets.so"
pickFirsts += "lib/x86_64/libworklets.so"
}
}
in your build.gradle.kts add inside android then add below code as your library name publishing inside afterEvaluate { listOf("mergeReleaseJniLibFolders", "mergeDebugJniLibFolders").forEach { taskName -> tasks.named(taskName) { doFirst { // Remove duplicate libworklets.so from react-native-worklets to avoid conflicts // with react-native-reanimated which also provides the same library fileTree("$buildDir/intermediates/exploded-aar/Loyalty_Cobrand/react-native-worklets") { include("/jni//libworklets.so") }.forEach { file -> println("Removing duplicate libworklets.so: ${file.path}") file.delete() } } } } }