美文网首页Android开发Android知识首页推荐
微博登陆SDK升级报错的解决方案

微博登陆SDK升级报错的解决方案

作者: 自己找知己 | 来源:发表于2016-10-13 18:38 被阅读126次

    项目中用到了第三方登录,其中有微博登陆,就是进行微博授权,然后获取微博账号的信息,导入到我们自己的项目中,用微博的账号信息添加到我们自己项目中的账号信息中。本篇文章就是在之前SDK的基础上发现问题,并进行升级遇到的问题及解决方案。

    一、发现问题
    监测到的Bug.png

    最近在后台监测中发现,连续几个版本都有上图的错误反馈。开发任务也比较仅,一直没有人来解决。昨天再看此错误,有空顺便查了一下,发现该问题别人已经有遇到过。

    二、追踪问题

    简单结论来说,引起上述错误的原因是在进行微博授权时需要启动一个微博的Service,但是Google在5.0以上的系统中,不再允许隐式启动一个Service,必须包含Component或PackageName两个属性其中的至少一个。源码如下图所示:

    Android源码中的Bug抛出位置.png

    好了,找到了异常抛出到位置。我们再回头找出现隐式启动的代码位置,通过错误栈信息,很容易定位到微博SDK的出错位置,如下图微博SDK代码:

    微博内部代码位置.png

    如上图,如果在第一次调用bindService方法进行绑定微博的Remotessoservice的时候失败,就会重新构建intent对象,然后再启动,这个时候,如果当前系统为5.0以上的系统,就会抛出上面的异常。

    三、解决问题

    这种第三方SDK的包的问题,最直接有效的方式当然是更新SDK包了。所以先去微博开放平台找最新的SDK包拿来换上。更换sdk包没什么说的,自己替换。本来更换个SDK包,替换,有不同的api,修改一下就可以了,但是测试时偏偏又报了错。错误如下:

    更新sdk后测试时出现的Bug.png

    遇到这个问题顿时就慌了,SDK包已经更新过了,Api有报错的,也按照新的api传参进行修改了。为啥还会报错,找了半小时没找到原因。隔了一夜,今天有空重新来排查这个问题。在看libs中的jar包时,竟然看到了两个关于新浪的jar,再去看新浪的demo时,只有一个。

    根本原因:新浪在提供的sdk是以library的形式提供的(studio中可以改成module),除了jar包,还有其他的java代码。我们项目中当初集成新浪微博的时候,把jar拿来放入了工程中,另外把java代码自己打成另一个jar加入到工程中。而本次我升级时,只更了微博的jar,另外一个java打的jar并没有动,所以可能会照成api不一致,找不到。

    意识到这个问题之后,就简单了,导微博的library,然后将java代码打成jar 包,进行替换原来的自己打的jar,然后测试,bingo,成功。

    记一笔。欢迎交流。

    相关文章

      网友评论

        本文标题:微博登陆SDK升级报错的解决方案

        本文链接:https://www.haomeiwen.com/subject/tjawyttx.html