一个“解决一个第三方应用一个功能打不开的问题”思路。
来源:互联网 发布:怎样修改淘宝店名 编辑:程序博客网 时间: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的包,安上。运行,不错。正常了。。
结语: 这个问题最后查出来的结果很简单,也让人有点无奈,但是解决这个问题的思路很值得纪念一下。特以此文记录。
- 一个“解决一个第三方应用一个功能打不开的问题”思路。
- 一个BDoc问题的解决思路
- Android程序打开第三方应用的一个解决方案
- Jdom嵌入第三方XML数据的一个问题
- 解决一个错误封禁的问题的过程和思路
- 如何编写一个第三方框架,我的设计思路及看法
- 解决xml中&符号"&"输入问题的一个思路
- 推荐一个豆瓣的第三方程序
- 一个跳出第三方代码的方法
- 一个播放器的第三方框架
- 发现一个python的第三方包
- RN好用的一个第三方
- 最新Anaconda2开发基于pyqt第三方库的GUI应用遇到的一个问题的解决方法
- 一个简单功能的测试思路
- 一个 Dribbble 第三方客户端
- 从android一个apk中启动第三方apk应用
- 从android一个apk中启动第三方apk应用
- 从android一个apk中启动第三方apk应用
- 丰东股份的进空间和三个房间个后建国后京沪高姐
- 部分重映像,完全重映像
- OpenStack压力测试(批量创建200个instance)--结果非常失望
- objective-c基础教程——学习小结
- Android设计模式系列集锦
- 一个“解决一个第三方应用一个功能打不开的问题”思路。
- Linux系统下ifconfig命令使用及结果分析
- 23种设计模式(11):责任连模式
- iOS如何对XML/SOAP文件进行解析
- 使用JFreeChart实现基于Web的柱状图
- Netty4详解一:理解Netty的设计理念NIO
- android google最新组件SwipeRefreshLayout
- iOS开发:使用SOAP访问Web服务
- 学习linux的菜鸟