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