当前位置: 首页 > news >正文

如何获得某个Window画面所属包名packageName和用户userId

在安卓上获得某个Window画面所属包名packageName和用户userId的方法

1,用到的工具如下:

adb
androidSDK里的monitor工具
adb shell dumpsys window animator
adb shell dumpsys window命令
jdk 1.8

已在安卓14模拟器上测试通过。
以AOSP的launcher中的map图层为例,如何确认map图层所属包名和用户?
在这里插入图片描述

实施步骤如下。

1),首先用androidSDK里带的monitor工具,查看对应window名称

(建议本地jdk版本是java1.8,否则可能打开失败)

java -version输出如下:
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-8u412-ga-1~22.04.1-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)

打开monitor工具:
sdk/tools/lib/monitor-x86_64/monitor目录下打开monitor工具: ./monitor

打开monitor ui界面后,点击右上角的Hierarchy View功能,在左侧的windows列表中,逐个确认和对比你想要查看的UI,确认下图里编号4的画面是否是你想要的UI画面。
在这里插入图片描述
在这里插入图片描述
我们可以看到,这个UI图层跟我们在真实设备上的UI一模一样,这就是我们需要的图层。
看左边的列表,可以看到window名称为:
com.android.car.mapsplaceholder/com.android.car.mapsplaceholder.MapsPlaceholderActivity

2,通过dumpsys window animator命令,查看window对象的hash

adb shell dumpsys window animator

WINDOW MANAGER ANIMATOR STATE (dumpsys window animator)Display{#8 state=ON size=968x692 ROTATION_0}:Window #0: WindowStateAnimator{dbae469 com.android.car.cluster.home/com.android.car.cluster.home.ClusterHomeActivity}Window #1: WindowStateAnimator{c616eee com.android.car.cluster.home/com.android.car.cluster.home.FakeFreeNavigationActivity}Display{#1 state=ON size=968x792 ROTATION_0}:Window #0: WindowStateAnimator{f5cef8f com.android.car.cluster.osdouble/com.android.car.cluster.osdouble.ClusterOsDoubleActivity}Display{#3 state=ON size=1408x792 ROTATION_0}:Window #0: WindowStateAnimator{329c21c com.android.systemui/com.android.systemui.car.userpicker.UserPickerActivity}Window #1: WindowStateAnimator{f945e25 InputMethod}Display{#2 state=ON size=1408x792 ROTATION_0}:Window #0: WindowStateAnimator{c798bfa com.android.car.multidisplay/com.android.car.multidisplay.launcher.LauncherActivity}Window #1: WindowStateAnimator{5c2f5ab InputMethod}Window #2: WindowStateAnimator{81ee408 SystemUIOverlayWindow}Window #3: WindowStateAnimator{4d1b7a1 HeadsUpNotification}Window #4: WindowStateAnimator{ac46dc6 BottomCarSystemBar}Window #5: WindowStateAnimator{c394187 ScreenDecorOverlay}Window #6: WindowStateAnimator{bc238b4 ScreenDecorOverlayBottom}Display{#0 state=ON size=1848x792 ROTATION_0}:Window #0: WindowStateAnimator{e312cdd com.google.android.car.kitchensink/com.google.android.car.kitchensink.KitchenSinkActivity}Window #1: WindowStateAnimator{689a052 com.android.car.radio/com.android.car.radio.RadioActivity}Window #2: WindowStateAnimator{8de6f23 com.android.car.carlauncher/com.android.car.carlauncher.CarLauncher}Window #3: WindowStateAnimator{4a42c20 com.android.car.mapsplaceholder/com.android.car.mapsplaceholder.MapsPlaceholderActivity}Window #4: WindowStateAnimator{18b9d9 InputMethod}Window #5: WindowStateAnimator{9fd6f9e ShellDropTarget}Window #6: WindowStateAnimator{b1eda7f }Window #7: WindowStateAnimator{fefea4c TopCarSystemBar}Window #8: WindowStateAnimator{5521a95 SystemUIOverlayWindow}Window #9: WindowStateAnimator{c4ce7aa HeadsUpNotification}Window #10: WindowStateAnimator{2d09f9b BottomCarSystemBar}Window #11: WindowStateAnimator{575f38 ScreenDecorOverlay}Window #12: WindowStateAnimator{186cb11 ScreenDecorOverlayBottom}mCurrentTime=433030 (321127 ms ago)

我们可以看到com.android.car.mapsplaceholder/com.android.car.mapsplaceholder.MapsPlaceholderActivity对应的hash号为4a42c20

      Window #3: WindowStateAnimator{4a42c20 com.android.car.mapsplaceholder/com.android.car.mapsplaceholder.MapsPlaceholderActivity}

3,通过dumpsys window命令,查看4a42c20 window对应的userId和包名

adb shell dumpsys window >~/dump_window.txt
查看4a42c20 window对应的dump信息,我们可以看到u10和package=com.android.car.mapsplaceholder信息。

  Window #9 Window{85b2366 u10 com.android.car.mapsplaceholder/com.android.car.mapsplaceholder.MapsPlaceholderActivity}:mDisplayId=0 rootTaskId=1000031 mSession=Session{a67f8cb 4470:u10a10134} mClient=android.os.BinderProxy@aa13fc1mOwnerUid=1010134 showForAllUsers=false package=com.android.car.mapsplaceholder appop=NONEmAttrs={(0,0)(fillxfill) sim={adjust=pan forwardNavigation} ty=BASE_APPLICATION wanim=0x10302fefl=LAYOUT_IN_SCREEN LAYOUT_INSET_DECOR SPLIT_TOUCH HARDWARE_ACCELERATED DRAWS_SYSTEM_BAR_BACKGROUNDSpfl=NO_MOVE_ANIMATION FORCE_DRAW_STATUS_BAR_BACKGROUND USE_BLAST FIT_INSETS_CONTROLLEDbhv=DEFAULTfitSides=}Requested w=1444 h=620 mLayoutSeq=277mHasSurface=true isReadyForDisplay()=true mWindowRemovalAllowed=falseWindowStateAnimator{4a42c20 com.android.car.mapsplaceholder/com.android.car.mapsplaceholder.MapsPlaceholderActivity}:Surface: shown=true layer=0 alpha=1.0 rect=(0.0,0.0)  transform=(1.0, 0.0, 0.0, 1.0)mForceSeamlesslyRotate=false seamlesslyRotate: pending=null    isOnScreen=trueisVisible=truekeepClearAreas: restricted=[], unrestricted=[]mPrepareSyncSeqId=0

最终获得我们需要的信息,User是10,packageName是com.android.car.mapsplaceholder

--------------------------------------------------End line-----------------------------------------

相关文章:

  • 一步步教你学会如何安装VMare虚拟机(流程参考图)
  • 8卦的形象记忆法
  • 【OpenCV C++20 学习笔记】扫描图片数据
  • 数据结构之判断二叉树是否为搜索树(C/C++实现)
  • 如何使用 Django 搭建 Web 服务器
  • JVM类加载机制详解
  • LwIP入门实战 — 1 计算机网络简述
  • 我在Vscode学Java集合类
  • Nest.js学习(一)
  • C# 数组常用遍历方式
  • 培训第十五天(shell脚本与sed的学习)
  • 111111111
  • OWASP top 10之XSS和csrf
  • 电脑如何进行录屏?电脑录屏无压力!
  • 前端开发知识(一)-html
  • Laravel 中的一个后期静态绑定
  • LeetCode18.四数之和 JavaScript
  • node学习系列之简单文件上传
  • pdf文件如何在线转换为jpg图片
  • PHP CLI应用的调试原理
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue自定义指令实现v-tap插件
  • 测试开发系类之接口自动化测试
  • 当SetTimeout遇到了字符串
  • 基于遗传算法的优化问题求解
  • 利用DataURL技术在网页上显示图片
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前嗅ForeSpider采集配置界面介绍
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一道面试题引发的“血案”
  • Java性能优化之JVM GC(垃圾回收机制)
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #{}和${}的区别?
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1)虚拟机的安装与使用,linux系统安装
  • (145)光线追踪距离场柔和阴影
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (黑马C++)L06 重载与继承
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (一) springboot详细介绍
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .htaccess 强制https 单独排除某个目录
  • .NET Core 成都线下面基会拉开序幕
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework与.NET Framework SDK有什么不同?