Было найдено более одного файла с независимым от ОС путем 'lib / x86 / libusb.so'

Я использую libusb в своем приложении для Android. Когда я пытаюсь создать libusb родную библиотеку, я получаю сообщение об ошибке: * .so файлы сгенерированы.

Ошибка: не удалось выполнить задачу ': app: transformNativeLibsWithMergeJniLibsForDebug'. Было найдено более одного файла с независимым от ОС путем '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"
}

Я использую Windows-машину. Кто-нибудь знает, в чем может быть проблема?


person N Sharma    schedule 06.07.2017    source источник


Ответы (9)


У меня возникла эта проблема в моем проекте React-Native Bridge после того, как я добавил файлы AAR стороннего SDK. И я подключал мост к моему основному приложению, поддерживающему React.

Решение (может отличаться для вас):

Добавьте это в app/build.gradle основное приложение React-Native:

packagingOptions {
    pickFirst '**/*.so'
}
  • Протестируйте проект Build on React-Native Bridge после добавления библиотек AAR.
  • Очистите проект React-Native Bridge
  • Очистите проект приложения React-Native
  • Удалите node_modules и повторно установите пакет моста в проект.
  • Запустите приложение.

Я столкнулся с другой проблемой, связанной с этим (если вы включите AAR в проект библиотеки, который не связан с основным приложением)

https://stackoverflow.com/a/58588503/3197778

person FAHID    schedule 29.10.2019
comment
также работал с проблемой отсутствия реакции, спасибо - person Amin Keshavarzian; 20.03.2021

Я удалил jniLibs.srcDir 'src/main/libs' код внутри блока sourceSets.main. Он дважды создавал файлы * .so.

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}
person N Sharma    schedule 07.07.2017
comment
У меня не сработало: Ошибка: (25, 1) Возникла проблема при оценке проекта ": приложение". ›Невозможно преобразовать объект 'src / main / jni / lib' с классом 'java.lang.String' в класс 'java.lang.Iterable' - person Paamand; 12.02.2018
comment
Спасибо, у меня сработало с Android Studio 4.0.1 и NDK версии 21.3.6528147. - person easy_breezy; 07.08.2020
comment
кажется, что в старой версии gradle srcDirs является обязательным, если вы хотите упаковать его в apk - person Summer Sun; 11.03.2021

вы можете использовать так:

добавьте следующий код в 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 означает: если более одного пути соответствует первому выбору, будет выбран только первый найденный. нажмите Получить дополнительную информацию

person Manna Yang    schedule 05.06.2019

Я видел аналогичную ошибку при запуске моего приложения после перехода на Android Studio 3.0. Чистая сборка решила проблему.

person Nonos    schedule 07.11.2017

в моем случае добавление их устранило проблему в модуль уровня приложения build.gradle

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'
}

но в вашем случае имена библиотек могут быть разными, поэтому замените их именами ваших библиотек

person Zeeshan Mehdi    schedule 17.06.2019

В случае нативной реакции добавьте файл android / app / build.gradle в раздел andorid: {.....} это:

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'
}

затем используйте gradlew clean

person Vivek Jm    schedule 12.05.2021

Я просто хочу добавить к ответу Nonos, что, как мне кажется, я получил эту проблему после запуска ndk-build в моем app/jni каталоге, а затем запуска ./gradlew installDebug из каталога верхнего уровня моего проекта Android NDK. Таким образом, выполнение ndk-build clean в app/jni перед выполнением следующей сборки Gradle действительно решило проблему.

person BlazePascal    schedule 03.12.2018

Решения N Sharma - это хорошо.

Но если ваш конфликт связан с внешним модулем, который вы добавили в качестве библиотеки в свой проект, и вы не можете редактировать его код, поскольку он доступен только для чтения, вы можете выполнить следующие шаги:

У меня возникла такая же проблема с библиотекой ffmpeg после объединения двух проектов Android в один проект.

На самом деле проблема возникла из-за двух разных версий библиотеки ffmpeg, но они были загружены в память с одинаковыми именами. Одна библиотека была помещена в JNiLibs, а другая - внутри другой библиотеки, используемой как модуль. Мне не удалось изменить код модуля, поскольку он был доступен только для чтения, поэтому я переименовал тот, который использовался в моем собственном коде, в ffmpegCamera и загрузил его в память с тем же именем.

System.loadLibrary("ffmpegCamera");

Это устранило проблему, и теперь обе версии библиотек загружаются в память с отдельным именем и идентификатором процесса.

person Mohsin Raza    schedule 09.03.2020

Очистите проект вручную. В каталоге проекта выполните следующие действия:

rm -rf .idea .gradle */build */.cxx
rm -rf ~/.gradle

Это очистит все промежуточные файлы, а также очистит кеш Gradle.

person Meixner    schedule 01.06.2021