作者:oneym
本文地址:http://blog.csdn.net/oneym/article/details/50472736
nativeLibraryDirectories=[/data/app-lib/com.oneym.yodak.ladybreast-2, /vendor/lib, /system/lib]]] couldn't find "libweibosdkcore.so"
上面是我的报错信息。
一、问题分析
综合所有的报错信息可以得出以下两点原因
- APP在运行的时候缺少
libweibosdkcore.so
库文件。 - 在
AndroidStudio
项目的libs目录下存在libweibosdkcore.so
库文件。
- APP在运行的时候缺少
由上述原因产生以下三点疑问
*.so
库文件是怎么工作的?- 怎么访问?
- 怎么判定
*.so
库文件工作了?
二、知识准备
声明:这里只描述最基本的问题,不做深入探讨。
- so文件是什么?
so文件也是ELF格式文件,是共享库(动态库),类似于DLL。是为了节约资源,加快速度,简化代码升级。多用于linux环境下。 - 怎么生成以及使用一个so动态库文件?
so文件一般是由c语言编写进过编译器编译生成的二进制文件。编译器可以是gcc也可能是其他,语言可以是c也可以是c++或其他。 - so文件是怎工作的?
so是一个动态库,他是一些分装完好的方法。而这些方法通过预留入口,使开发者的程序能够去访问和再次利用。类似于接口。开发者通过发送特定格式的参数给so文件,so文件会返回经过处理的数据给调用程序。 - 如何判定so文件工作了?
给so发送特定格式参数,查看是否有数据返回。没有数据返回那么该so文件可能没有工作(需要跟换调用的方法试一下);在有数据返回的情况下可以表示so文件工作了 - 如何访问?
这里是java调用so库,可以使用jni技术访问(因为这里微博的so库是由第三方来调用,就不赘述jni技术了)。给一个jni技术的介绍链接。
三、历史尝试
- 添加build.gradle配置如下
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
- 把so库打包成jar文件
四、我成功的方法
将libweibosdkcore.so
库和父目录一同拷贝到root/src/main/jniLibs/
目录下。其中jniLibs
可以自定义名称。我的目录结构如下
jniLibs/
├── arm64-v8a
│ └── libweibosdkcore.so
├── armeabi
│ └── libweibosdkcore.so
├── armeabi-v7a
│ └── libweibosdkcore.so
├── mips
│ └── libweibosdkcore.so
├── mips64
│ └── libweibosdkcore.so
├── x86
│ └── libweibosdkcore.so
└── x86_64
└── libweibosdkcore.so
五、参考信息
- http://blog.csdn.net/wulianghuan/article/details/44567001
- https://github.com/sinaweibosdk/weibo_android_sdk/issues/45
六、结束语
如果对文章有疑问可以通过邮箱oneym@sina.cn
与我一起探讨。
也可以加入QQ群137163838
,开源我们的思维,点亮整个世界!