出于测试的目的,我使用adb shell dumpsys activity <activity_name>
转储前台Activity中的片段信息。
问题是转储的片段名称只包含类名而不包含其全名(全名是指包名+类名)。例如,如果片段的全名为aaa.bbb.ccc.MyFragment
,则转储的片段名称将为MyFragment
。
如果应用未进行模糊处理,这不是一个严重的问题。但是,当应用进行模糊处理时,转储的片段名称将大多类似于单个字符(例如,a
,b
,c
,...)。因此,很难仅通过转储的名称来区分两个不同的片段。
为什么Android操作系统选择只转储类名?转储全名有什么困难?adb用户是否有其他选项可以在运行时获取片段的全名?
1条答案
按热度按时间kr98yfug1#
根据Android源代码,该片段的
toString()
使用DebugUtils.buildShortClassTag()
打印类名。Fragment.java
DebugUtils.java
我们可以看到
buildShortClassTag()
使用cls.getClass().getSimpleName()
来打印类名。综上所述,我们无法获得片段的全名,除非我们改变Android框架的源代码并构建一个自定义的操作系统。但这种解决方案并不完美,因为AndroidX中的片段有自己的逻辑来打印片段信息。AndroidX库被打包在一个apk中,它们也被混淆。