项目中用到了第三方登录,其中有微博登陆,就是进行微博授权,然后获取微博账号的信息,导入到我们自己的项目中,用微博的账号信息添加到我们自己项目中的账号信息中。本篇文章就是在之前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,成功。
记一笔。欢迎交流。
网友评论