今天开启新的项目,把公共模块移植过来后发现一直提示couldn't find "XXX.so"。
??好家伙,好久没这打交道了,让我想想怎么回事。
首先,这个时候,大家先确定,自己so文件放的位置对不对,android studio默认是去jniLibs文件夹去找so文件的。
/src/main/jniLibs 注意是在 main下面。
如果位置正确的话,检查一下model下的build.gradle中是否有以下代码:
sourceSets { main { jniLibs.srcDirs = ['libs'] }}
这句是改变.so的路径到libs下。如果有的话。请删除或者把.so文件移动到libs下。
但是依然有错呢。请检查提示,没有找到文件前面的路径,如果是什么armeabi,armeabi-v7a,x86等等之类的路径。说明机器需要这个路径下的.so文件,你建立了文件夹又没有提供对应的版本。
1.你可以复制其他的文件内的.SO到缺失路径下。
2.在工程中配置项目支持的类型。
android{
ndk{
abiFilters"armeabi","armeabi-v7a","x86"
}
}
这样只会在指定的类型内选择.so文件
3.android {
// rest of your app's logic
splits {
abi {
enable true
reset()
include 'x86', 'x86_64',
'arm64-v8a', 'armeabi-v7a', 'armeabi'
universalApk false
}
}
}
打包的时候分包
enable: 是否启用ABI拆分机制
reset():重置ABI列表为只空字符串,一半和include、exclude一起使用,如果要用必须在include和exclude前面
include:指明要包含哪些ABI,目前使用最多的伪64位处理器的arm64-v8a,其次才是armeabi-v7a
exclude:默认包含下所有ABI,可以移除一些ABI
universalApk:是否打包一个通用版本,包含所有的ABI,默认值为 false
————————————————————
但是呢。我都没解决。什么鬼。后来通过各种排除发现,降低classpath'com.android.tools.build:gradle:3.6.4'
到我原项目classpath'com.android.tools.build:gradle:3.5.1' 之后问题解决。至于原因。空闲的时候再研究