Проблема со вкусом сборки gradle и упаковкой - PullRequest
0 голосов
/ 13 сентября 2018

Я некоторое время разрабатывал библиотеку (в формате aar), которая совместима с x86, armeabi-v7a и arm64-v8a abis. Библиотека работает как положено, но для уменьшения окончательного размера мы хотим разработать две разные библиотеки: одну с ab64 arm64-v8a и одну без нее. Библиотека зависит от openCV (используется на языке C ++), и у нас есть следующая структура проекта:

src
 |_ main
     |_ jniLibs
           |    | arm64-v8a
           |----| armeabi-v7a
                | x86

Каждая папка abi содержит libopencv_java3.so.

Я создал два варианта продукта, каждый с abiFilters, необходимыми для правильной работы.

flavorDimensions "default"
productFlavors {
    v7a {
        externalNativeBuild {
            cmake {
                abiFilters 'x86', 'armeabi-v7a'
            }
        }
    }
    v8a {
        externalNativeBuild {
            cmake {
                abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
            }
        }
    }
}

Теперь у меня есть два варианта сборки, и оба компилируются без ошибок. Тем не менее, v7a aar по-прежнему содержит папку arm64-v8a и библиотеку. Чтобы решить эту проблему, я добавил v7a flavor следующее:

packagingOptions {
    exclude 'lib/arm64-v8a/libopencv_java3.so'
}

Теперь, v7a aar не содержит внутри себя папку arm64-v8a, но когда я выбираю версию v8a, папка существует, но внутри нее нет libopencv_java3.so!

Разве эта опция не должна влиять только на v7a? Что я делаю неправильно? Любая помощь будет оценена.

Примечания: проверенная версия Gradle: 3.1.2 и 3.1.4.

1 Ответ

0 голосов
/ 15 сентября 2018

Попытайтесь разделить по-другому, вместо использования предпочтений продукта -

, так как этот может загрузить armeabi-v7a сборку на arm64-v8a:

splits {
    abi {
        enable true
        reset()
        include "armeabi", "x86"
        universalApk true
    }
}

, что и следовало ожидать (32-битная версияиз библиотеки) в armeabi/libopencv_java3.so.

externalNativeBuild рассматривает только библиотеки, которые создаются (иначе как «ваш код»).если вы настаиваете на использовании packagingOptions, вам не следует определять их глобально, а для каждого продукта.

v7a {
    ...
    packagingOptions {
        exclude 'lib/arm64-v8a/libopencv_java3.so'
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...