Android使用Gradle架构的Android应用,需要对.so库做特殊的处理,因为会找不到,就会导致编译正确,使用错误;常见的使用情况是根据不同的cpu,有不同的库,包括:armeabi,mips,x86等。
报错:
1
|
java.lang.UnsatisfiedLinkError: Couldn't load weibosdkcore from loader dalvik.system.PathClassLoader[DexPathList[[zip file /data/app/xxx.apk],nativeLibraryDirectories=[/data/app-lib/xxx-
2
, /vendor/lib, /system/lib]]]: findLibrary returned
null
|
有两种方法可以解决:
1. 将“.so”库生成jar
把jar引入项目即可,需要注意目录的顺序:
1
2
3
|
-lib
--armeabi
---xxx.so
|
命令:
1
|
jar cvf xxx_cpu.jar ./lib
|
再加载到应用中,即可;
2. 使用gradle配置
在Android{}的范围内,添加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//noinspection all
task copyNativeLibs(type: Copy) {
// third party lib so
from(
new
File(projectDir,
'libs'
)) { include
'armeabi/*.so'
}
into
new
File(buildDir,
'native-libs'
)
}
tasks.withType(JavaCompile) {
compileTask ->
//noinspection all
compileTask.dependsOn copyNativeLibs
}
//noinspection all
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
pkgTask ->
pkgTask.jniFolders =
new
HashSet<file>()
pkgTask.jniFolders.add(
new
File(buildDir,
'native-libs'
))
}</file>
|
即可,//noinspection all可以去除warning。
结伴旅游,一个免费的交友网站:www.jieberu.com
推推族,免费得门票,游景区:www.tuituizu.com