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 ?
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'
}
}
I faced another issue related to this (If you include AAR into library project that's not being linked to main application)
https://stackoverflow.com/a/58588503/3197778
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
}
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With