Android apk - Как исключить файл .so из сторонней зависимости с помощью gradle

У меня есть проект андроида с несколькими зависимостями. Два из них (пусть называют их зависимость A и B) имеют родные библиотеки (файлы .so).

Зависимость A имеет следующие архитектуры: arm64-v8a, armeabi, armeabi-v7a, x86 и x86_64. Зависимость B имеет следующие архитектуры: armeabi, x86

Таким образом, когда мое приложение работает на устройстве armeabi-v7a (например), а зависимость B вызывает собственный метод, он не может найти соответствующую библиотеку для ее получения (поскольку он отсутствует в папке armeabi-v7a и делает это не отступать автоматически до армейцев, где находится библиотека).

Есть ли способ обойти это? Например, могу ли я добавить некоторую конфигурацию в файл build.gradle, чтобы файлы arm64-v8a, armeabi-v7a и x86_64 не были интегрированы в мой последний apk?

Я попробовал packageOptions/exclude, но без результатов: папки в вопросах все еще существуют.

Ответ 1

Попробуйте чистую сборку, я этого не сделал, и она все еще собирала файлы из предыдущей сборки. Я просто удалил свою папку app/build/.

android { 
    packagingOptions {
        exclude 'lib/armeabi-v7a/libSomeLibYouDontWant.so'
    }
}

Работала для меня в приложении, которое ранее сбой.

Альтернативой может быть использование

android{
    defaultConfig{
        ndk{
            abiFilters "armeabi", "x86"
        }
    }
}

Есть несколько похожих вопросов, которые могут быть полезны

Gradle исключить arm64 libs

Как использовать 32-разрядные собственные библиотеки на 64-битном устройстве Android