在Android的dumpsys中获取当前可见Fragment的信息

17

我正在寻找一种解决方案,以确定从dumpsys中当前可见的是哪些片段

我可以获取有关活动的信息

$ adb shell dumpsys activity | grep -i run

有没有关于碎片的解决方案,或者如何从dumpsys确定可见的碎片?

3个回答

35

使用adb shell dumpsys activity -h检查文档。您可以提供一个<COMP_SPEC>参数,adb shell dumpsys activity <COMP_SPEC>。当您提供<COMP_SPEC>参数时,您会获得有关特定组件的更多信息,包括可见的碎片和视图。

例如,在显示Android设备设置时:

$ adb shell dumpsys activity com.android.settings
在我的设备上,命令输出包含以下内容:
...
Active Fragments in 13c3a270:
  #0: DashboardSummary{186a79e9 #0 id=0x7f0e017b}
    mFragmentId=#7f0e017b mContainerId=#7f0e017b mTag=null
    mState=5 mIndex=0 mWho=android:fragment:0 mBackStackNesting=0
    mAdded=true mRemoving=false mResumed=true mFromLayout=false mInLayout=false
    mHidden=false mDetached=false mMenuVisible=true mHasMenu=false
    mRetainInstance=false mRetaining=false mUserVisibleHint=true
    mFragmentManager=FragmentManager{13c3a270 in Settings{ef6d7d6}}
    mActivity=com.android.settings.Settings@ef6d7d6
    mContainer=android.widget.FrameLayout{9b1166e V.E..... ........ 0,0-768,1022 #7f0e017b app:id/main_content}
    mView=android.widget.ScrollView{1c50410f VFED.V.. ........ 0,0-768,1022 #7f0e005a app:id/dashboard}
    Child FragmentManager{2298759c in DashboardSummary{186a79e9}}:
      FragmentManager misc state:
        mActivity=com.android.settings.Settings@ef6d7d6
        mContainer=android.app.Fragment$1@167cba5
        mParent=DashboardSummary{186a79e9 #0 id=0x7f0e017b}
        mCurState=5 mStateSaved=false mDestroyed=false
...

是否有可能获取软键盘内容的可见片段?比如打开一个应用程序,在其中有一个输入字段,点击它并获取每个按钮/字母、建议字段等的列表或片段? - Nicofisi
1
您可以使用 adb shell dumpsys window InputMethod | grep "mHasSurface" 命令获取软键盘的可见性。但是,通过简单测试,我无法获取键盘的内容(我比较了可见和不可见键盘的转储)。 - Juuso Ohtonen
1
@Nicofisi 请发布一个新问题以获得更多关注(和可能的真正答案)。 - Juuso Ohtonen
谢谢,这非常有帮助!在Android Studio中是否有任何工具可以帮助可视化输出? - vir us
@vir可能是这个吗?http://discuss.appium.io/t/uiautomatorviewer-is-now-replaced-with-monitor-starting-with-android-studio-2-3/15231 - Juuso Ohtonen

10

这将展示您的活动和片段的实时视图:

watch -n 1 "adb shell dumpsys activity top | grep -E 'Fragment|Activity' | head -60"

1
adb shell dumpsys activity $package_name_of_foreground_app | grep Fragment

获取前台应用程序包名称的方法可能不同,对于我来说是:

adb shell dumpsys activity recents | grep 'Recent #0' | cut -d= -f6 | sed 's| .*||' | cut -d '/' -f1 | cut -d: -f2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接