我一直在开发一个与x86,armeabi-v7a和arm64-v8a abis兼容的库(以aar格式).该库按预期工作,但为了减小最终大小,我们希望开发两个不同的库:一个使用arm64-v8a abi,另一个不使用它.该库依赖于openCV(在C++语言中使用),我们有以下项目结构:
src
|_ main
|_ jniLibs
| | arm64-v8a
|----| armeabi-v7a
| x86
Run Code Online (Sandbox Code Playgroud)
每个abi文件夹都包含libopencv_java3.so.
我创建了两种产品口味,每种口味都需要abiFilters才能正常工作.
flavorDimensions "default"
productFlavors {
v7a {
externalNativeBuild {
cmake {
abiFilters 'x86', 'armeabi-v7a'
}
}
}
v8a {
externalNativeBuild {
cmake {
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个构建变体可供选择,并且编译时没有错误.但是,v7a aar仍包含arm64-v8a文件夹和库.为了解决这个问题,我在v7a中添加了以下内容:
packagingOptions {
exclude 'lib/arm64-v8a/libopencv_java3.so'
}
Run Code Online (Sandbox Code Playgroud)
现在,v7a aar不包含其中的arm64-v8a文件夹,但是当我选择v8a flavor时,该文件夹存在但是没有libopencv_java3.so放在其中!
这个选项不应该只对v7a有影响吗?我究竟做错了什么?任何帮助将不胜感激.
注:测试的gradle版本:3.1.2和3.1.4.