我需要过滤我的第 3 方本机库,并且只允许所有这些库使用“armeabi”。有一个例外!- 特定库必须包含在其“armeabi-v7a”变体中。
如何根据库以不同方式过滤我的 3rd 方本机库?(或在应用程序模块上)
我最终在我的 APK 中想要的是:
- armeabi / lib-1.so
- armeabi / lib-2.so
- armeabi / lib-3.so
- armeabi-v7a / special-lib.so
完整的故事:
我有一个内置在几个模块中的应用程序。它使用了一些 3rd 方本机库。到目前为止,我们只使用所有库的“armeabi”版本,因为它们最兼容,而且我们的目标是小应用程序大小(没有多个 APK)。但是,现在我们需要包含一个新的 3rd 方库,该库仅以“armeabi-v7a”形式提供。
我们一直在使用过滤器:
productFlavors {
app {
ndk {
abiFilters "armeabi"
}}}
它位于主应用程序模块中。它从所有模块和库中过滤所有本机库。现在我们被迫使用这个过滤器:
productFlavors {
app {
ndk {
abiFilters "armeabi", "armeabi-v7a"
}}}
这使应用程序工作,但也显着增加了它的大小。我们不想使用它。它允许新库的 armeabi-v7a 版本,但也允许我们不想包含的其他一些库的 armeabi-v7a 版本。
问题:我们希望仅允许“armeabi-v7a”用于驻留在我们的一个应用程序模块中的一个特定库。我们可以通过 ABI 过滤器或其他方式来实现吗?
关于 64 位的注意事项:我知道,如果您有任何 64 位本机库,则需要拥有所有这些库(因为如果应用程序找到一个 64 位库,它将以 64 位模式启动并且不会能够使用 32 位库)。但是,在 armeabi 与 armeabi-v7a 的情况下,没有这样的问题,您不必提供每个库的两个版本。