Mig*_*sla 7 android gradle android-gradle-plugin
我一直在开发一个与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.
尝试以不同的方式进行分割,而不是使用产品优惠 -
同样,这个可以加载armeabi-v7a程序集arm64-v8a:
splits {
abi {
enable true
reset()
include "armeabi", "x86"
universalApk true
}
}
Run Code Online (Sandbox Code Playgroud)
这将期望(32位版本的)库位于armeabi/libopencv_java3.so.
externalNativeBuild只考虑正在构建的库(也称为“您的代码”)。如果您坚持使用packagingOptions,则不应在全局范围内定义它们,而应根据产品风味进行定义。
v7a {
...
packagingOptions {
exclude 'lib/arm64-v8a/libopencv_java3.so'
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |