AndroidStudio打包Apk java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader:couldn't find "lib

     早上一来,一哥们找我,让帮忙看个问题,是他们的工程在使用微博SDK的功能时候,开发工具用的AndroidStudio,工程中有添加微博规定的so库,但是一运行,就直接崩溃,报couldn't find "libweibosdkcore.so",so库找不到。好,拿到问题,还是要先根据现象分析,判断清楚问题产生的原因在哪里。


     首先,使用微博给出的demo,gradle配置也是完全相同的,运行完成,正常,加载so库和调用方法都没有问题。然后运行自己的项目,调用System.loadLibrary("weibosdkcore")加载微博的so库时就直接崩溃,问了下他,各种查找,各种百度,各种google,都用了,但是问题仍然没有解决。然后还给我说,在微博的开放平台上各种找,也没有办法,里边推荐的QQ群也满了,根本加不进去,发邮件给微博,屁都没有回。这种感觉我也是有的,之前搞过一个项目,也是调用微博的功能,出现个问题,各方面找,就是没办法,也是相同的给微博发邮件,但是泥牛入海,根本没有因信,所以从那之后就不找官方了。

     估计官方人员都是非常繁忙,没鸟空理会我们这些屌丝!!

     娘的,没人回就自己搞!开始让我们哥们把他初始化的代码和崩溃的日志发过来看下,初始化调用和崩溃的截图如下:



     那么首先就要确定一下,apk安装完成后,对应的so库到底有没有成功解析出来?大家都知道,每个工程对应有个data目录,就是放的工程的各种文件,有sharedPreferences、file、database、lib,其中的lib就是存放我们在工程当中引用的so库的,好,我让他adb shell进入当前的工程目录下看一下,结果确实没有。


     而其他两个so库是正常的,好,那么我们需要进一步确认了,为什么so库没有,是打包apk时候就出问题了,还是PMS在安装过程中解析apk出问题了?PMS解析apk出问题,这个应该不可能,如果是这样,那demo应该也会崩溃了,而且这是系统安装的必要步骤,这里出问题的概率应该非常小,基本上就是不可能!好,那么从第一个猜想入手,是不是AndroidStudio打包apk时,对应的微博so库根本没进来,这个可能性还是比较大的,第一,AS推出时间不久,有一些小的Bug也是正常的,另外呢,他们的工程当中gradle配置是不是有问题,可能也有可能和扰码有关,之前也碰到过我们哥们问我的,最终查出来就是和项目扰码导致的问题。那么怎么验证这个猜想呢?最直接的就是把apk文件解压一下,看看那个so库到底有没有。

    在让他试的过程中,自己也各种百度,找到一个跟他的崩溃描述非常相似的,不过全英文,自己也没怎么看。

    The Perils of Loading Native Libraries on Android

     大家如果有英文非常好的,希望能翻译出来看一下,他解压完看了下,果然,lib目录下根本没有微博的so库:



     我们初步的判断已经正确了,问题的范围缩小了一些。那么demo为什么是正常的呢,让他把demo解压也看一下,demo当中根本没有lib目录。


     看来很可能是gradle配置的问题了,两个工程出来的apk文件目录都不一样,真可惜,自己对gradle又一点不懂。又让他把工程的build.gradle发过来看一下。


     跟so库相关的配置就是sourceSets节点了,然后又各种百度,发现网上有说如下这样配置的:


     自己先搞个Demo,按照两种配置试了下,果然,第一种配置没有lib目录,而第二种配置就会有lib目录了,而且微博的so库也在当中。


     我靠,真是如获至宝啊!!!!让他再试了下,果然,打包出来的apk解压出来也是有对应的so库的,再运行一下,OK,没有问题!!!哈哈哈哈哈,好兴奋,又给哥们帮忙搞了个问题,自己也赶紧写个博客记录下来,以免自己以后碰到又忘了!

     最终的解决方案如下:

     原始build.gradle中sourceSets的配置如下:

     sourceSets {
         main {
             jniLibs.srcDirs = ['libs']
         }
     }

     将其改为如下:

     sourceSets {
         main {
             jni.srcDirs = []
             jniLibs.srcDirs = ['src/main/jniLibs']
         }
     }

     从这里其实最终解决问题是小,最主要的是想给大家说一下我们解决问题的思路,尤其在碰到一些自己根本没办法的问题时,一定要一步步将问题的范围缩小,如果能最终确定问题的产生原因,那解决它就是小case了!

     好了,希望本博客能给碰到相同问题的同学带来帮助,也希望大家关注我的博客!!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红-旺永福

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值