一个“解决一个第三方应用一个功能打不开的问题”思路。

来源:互联网 发布:怎样修改淘宝店名 编辑:程序博客网 时间:2024/04/28 16:30

最近发现一个手机预制的应用(A)在我们手机上(B)不能正常运行,由于中间还需要调用另一个公司(C)引擎。询问A 和C 都说他们的没问题,他们的那边都能正常.我们作为手机厂商,这两边的code我们都是不能拿到的,所以查起来很是麻烦。最终找到了A的出问题的具体的类和方法, 这个分析问题的过程很值得记录一下。


1》当我拿到这个问题的时候,第一反应是打开终端查看log, 看是不是由于权限之类的问题导致的。

    但是失望了,毛的log也没有打出来。。。。


2》这个时候怎么办,哎~没办法,先向C去询问要调用引擎的API ,然后自己写一个小的demo.(哎,本来时间就紧张,吐槽下A浪费时间。)

      结果发现自己的demo程序完美运行,perfect.这个时候,我就感觉到应该问题出在A身上。

 

3》 既然A 也说自己的程序没问题,那好吧,找个跟A一样的机器。google标准nexus.跑下,我擦,果然A没有骗人,它真的跑的很happy.. 

     这个时候,我又惊慌了,这是为毛,难道我们辛苦做的系统会有这么大的兼容性问题吗?我不信,来吧,接着查。


4》 做系统的怕什么,我们有系统源码,所有的code都最终还是要调用framework的code。通过demo程序也大概知道它会调用framework的哪几个接口。

     打上断点,单步。问题逐渐水落石出显现出来。。发现了某个奇怪的地方,一个地方的listener居然为null,这个是不正常的。至此可以确定是A 的问题了。

    但是想要帮助A尽快解决问题。所以还得继续查。(我们时间不多,沟通什嘛的,很费时间。)


5》没源码咋办?我们有神器apktool dex2jar & jd-gui (用法请自行百度)  ,反编译,虽然很多乱码,但是也足够了。

    找到debug时listener取值的地方,往后看看code,我擦,原来A犯了一个极低级的错误,居然用google的包去判断C是否存在(起因应该是最开始用的是google的引擎,后来替换C的引擎的时候没有替换全) ,我们的手机上还没有安装GMS,所以不能正常运行。。验证下,去百度应用中下载它需要的2个google的包,安上。运行,不错。正常了。。



结语: 这个问题最后查出来的结果很简单,也让人有点无奈,但是解决这个问题的思路很值得纪念一下。特以此文记录。


  




0 0
原创粉丝点击