Android - Gradle架构中使用的“.so”库

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。