'More than one file was found with OS independent path 'lib/x86/libusb.so'
I am using libusb in my android application. When I am trying to build libusb
native library then I get below error message, *.so files generated.
Error:Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'. More than one file was found with OS independent path 'lib/x86/libusb.so'
build.gradle
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.williams.libusbpoc"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
// call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec) {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
} else {
commandLine 'ndk-build', '-C', file('src/main').absolutePath
}
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation ('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:26.0.0-beta2'
testImplementation 'junit:junit:4.12'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
compile "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version"
}
I am on windows machine. Does anyone know what could be the issue ?
Solution 1:[1]
I removed jniLibs.srcDir 'src/main/libs'
code inside sourceSets.main block. It was creating *.so files twice.
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
Solution 2:[2]
I was having this issue in my React-Native Bridge project after I added AAR files of 3rd party SDK. And I was linking the Bridge into my Main React-native application.
Solution (May differ for you):
Add this in app/build.gradle
the Main React-Native application:
android {
// ...
packagingOptions {
pickFirst '**/*.so'
}
}
- Test the Build on React-Native Bridge project after adding the AAR libraries.
- Clean the React-Native Bridge project
- Clean the React-Native application project
- Remove node_modules and re-install the bridge package into the project.
- Run the application.
I faced another issue related to this (If you include AAR into library project that's not being linked to main application)
Solution 3:[3]
you can use like this:
add the following code into build.gradle ,
packagingOptions {
pickFirst 'lib/armeabi-v7a/your_name.so'
pickFirst 'lib/arm64-v8a/your_name.so'
pickFirst 'lib/x86/your_name.so'
pickFirst 'lib/x86_64/your_name.so'
}
this pickFirst that means : if more than one path matches the first-pick, only the first found will be selected. please click Get more information
Solution 4:[4]
In case of react-native add android/app/build.gradle file into andorid : {.....} section this :
packagingOptions {
pickFirst 'lib/x86/libc++_shared.so'
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
pickFirst 'lib/arm64-v8a/libc++_shared.so'
pickFirst 'lib/x86_64/libc++_shared.so'
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
}
then use "gradlew clean"
Solution 5:[5]
I've seen a similar error running my app after migration to Android Studio 3.0. A build clean solved the issue.
Solution 6:[6]
in my case adding these fixed the issue to build.gradle app level module
packagingOptions {
pickFirst 'lib/armeabi-v7a/libblasV8.so'
pickFirst 'lib/mips/librsjni.so'
pickFirst 'lib/x86/libblasV8.so'
pickFirst 'lib/mips/libRSSupport.so'
pickFirst 'lib/mips/libblasV8.so'
}
but in your case library names could be different so replace them with your library names
Solution 7:[7]
Manually clean the project. Perform the following in the project directory:
rm -rf .idea .gradle */build */.cxx
rm -rf ~/.gradle
This will clean up all intermediate files and also clear the gradle cache.
Solution 8:[8]
I just want to add to Nonos answer that I think I received this issue after running ndk-build
within my app/jni
directory, and then running ./gradlew installDebug
from the top-level directory of my Android NDK project. So doing an ndk-build clean
in app/jni
before doing another Gradle build did indeed solve the problem.
Solution 9:[9]
N Sharma solutions is good.
But in case your conflict is with an external module that you added as a library in your project and you are not able to edit its code as it is readonly you can follow below steps:
I was facing same issue with ffmpeg library after merging two Android projects as one project.
Actually issue was arriving due to two different versions of ffmpeg library but they were loaded with same names in memory. One library was placed in JNiLibs while other was inside another library used as module. I was not able to modify the code of module as it was readonly so I renamed the one used in my own code to ffmpegCamera and loaded it in memory with same name.
System.loadLibrary("ffmpegCamera");
This resolved the issue and now both versions of libraries are loading well as separate name and process id in memory.
Solution 10:[10]
I was seeing this error after adding react-native-pdf to my project. FAHID's solution worked for me.
Note that in later versions of Gradle, pickFirst()
is deprecated in favor of resources.pickFirsts()
or jniLibs.pickFirsts.add()
.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow