ADB问题分析利器
分析app不能不提adb
查看应用当前有几个栈?
当app内出现多栈问题时,如何快速界定当前app中的Activity存在于哪些栈。
思路如下:
- 过滤出当前app的所有存活的Activity
- 显示栈信息
通过dumpsys activity activities
展示出所有的Activity,结合grep滤出所有的栈信息,滤出特定affinity的栈
adb shell dumpsys activity activities|grep TaskRecord|grep com.wuba|grep \*
查看目标App支持的Action/Intent-Filter
这个场景源自分析OPPO等手机上如果打开应用市场。标准情况下我们可以通过market协议,但是如果发现某些设备上无法唤起,就需要进行排查。
思路如下:
- 测试设备是否能唤起应用市场
- 确定设备上的应用市场包名
- 过滤显示应用市场app的action列表
通过am start
启动知道页面或者发出Intent,可以验证是否能够吊起应用。
通过dumpsys package
显示应用相关信息,结合-f
参数滤出intent filter信息
OPPO市场分析
adb shell am start -a android.intent.action.VIEW -d market://detail?id=com.wuba
adb shell dumpsys package -f com.oppo.market|less
Schemes:
market:
33592d6 com.oppo.market/a.a.a.aoz filter 23b9858
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "market"
Authority: "details": -1
33592d6 com.oppo.market/a.a.a.aoz filter 7daddb1
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "market"
Authority: "search": -1
oppomarket:
33592d6 com.oppo.market/a.a.a.aoz filter 580f3ca
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "oppomarket"
Authority: "ProductDetail": -1
33592d6 com.oppo.market/a.a.a.aoz filter a6b893b
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "oppomarket"
Authority: "details": -1
33592d6 com.oppo.market/a.a.a.aoz filter fa28296
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "oppomarket"
Authority: "detail_search": -1
根据intent信息,可以知道,OPPO市场支持market://details
不支持market://detail
这就尴尬了,再次查询Google官方的协议,发现也是details
,因此使用detail可能笔误,不过实际上有些设备两种都支持,比如MIUI
。
除了Google的标准market协议,厂商一般还有自己的协议头,看规律就是给market加了前缀,如oppomarket
,mimarket
。