AndroidStudio-/vendor/lib, /system/lib]]] couldn't find "libweibosdkcore.so"

作者: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"

上面是我的报错信息。

一、问题分析

  • 综合所有的报错信息可以得出以下两点原因

    1. APP在运行的时候缺少libweibosdkcore.so库文件。
    2. AndroidStudio项目的libs目录下存在libweibosdkcore.so库文件。
  • 由上述原因产生以下三点疑问

    1. *.so库文件是怎么工作的?
    2. 怎么访问?
    3. 怎么判定*.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

六、结束语

如果对文章有疑问可以通过邮箱[email protected]与我一起探讨。
也可以加入QQ群137163838,开源我们的思维,点亮整个世界!

你可能感兴趣的:(Andriod)