如何获得某个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-----------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【.NET 6 实战--孢子记账--从单体到微服务】--开发环境设置

在这一小节,我们将设置开发环境。 一、安装SDK 咱们的项目使用的是 .NET6,开发前我们需要从官网上下载.NET6 SDK(点击下载),这里要注意的是我们需要下载.NET6 SDK,而不是 .NET6 Runtiem 。SDK 包含 Runti…

C++静态成员变量和静态成员函数

演示代码如下&#xff1a; #include<iostream> using namespace std;class Person { public://静态成员函数 所有对象共享一个函数&#xff0c;且只能调用静态成员变量 ******static void func(){m_A 300;cout << "静态成员函数调用" << endl;}/…

【MySQL进阶之路 | 高级篇】简述Bin Log日志

1. 日志类型 MySQL有不同类型的日志文件&#xff0c;用来存储不同类型的日志&#xff0c;分为二进制日志、错误日志、通用查询日志和慢查询日志&#xff0c;这也是常用的4种。MySQL 8又新增两种支持的日志:中继日志和数据定义语句日志。使用这些日志文件&#xff0c;可以查看M…

openFeign实现服务间调用

以两个模块&#xff08;batch&#xff0c;business&#xff09;为例子&#xff0c;期望实现batch调用business中的hello接口 在主程序batch中引入pom文件 <!--远程调用openfeign--><dependency><groupId>org.springframework.cloud</groupId><arti…

Linux网络工具“瑞士军刀“集合

一、背景 平常我们在进行Linux服务器相关运维的时候&#xff0c;总会遇到一些网络相关的问题。我们可以借助这些小巧、功能强悍的工具帮助我们排查问题、解决问题。 下面结合之前的一些使用经验为大家介绍一下一些经典应用场景下&#xff0c;这个网络命令工具如何使用的。例如怎…

游泳馆押金原路退回源码解析

<dl class"list "><dd class"address-wrapper dd-padding"><div class"address-container"><cyberdiv style"color:#f0efed;font-size:14px;float:right;position:absolute;right:10px;top: 2px;">●●●<…

MYSQL 第三次作业

1、第三次作业 01、SELECT * FROM student; SELECT * FROM score; 02、SELECT * FROM student LIMIT 1, 3; 03、SELECT * FROM student WHERE department IN (计算机系, 英语系); 04、SELECT * FROM student WHERE birth_year > 1998; 05、SELECT department, COUNT(*) as c…

CSP-J模拟赛day1——解析+答案

题目传送门 yjq的吉祥数 题解 送分题&#xff0c;暴力枚举即可 Code #include<bits/stdc.h> using namespace std;int l,r; int num1,tmp0,q[10000],a[10000]; int k (int x){for (int j1;j<tmp;j){if (xq[j])return 0;}return 1; } int main(){while (num<100…

Linux Vim全能攻略:实战代码,轻松掌握文本编辑神器

1. Vim简介与安装 1.1 Vim的历史与发展 Vim&#xff08;Vi IMproved&#xff09;是一款高度可配置的文本编辑器&#xff0c;它起源于1976年由Bill Joy开发的Vi编辑器。Vi是Unix系统上最古老的文本编辑器之一&#xff0c;因其强大的功能和高效的编辑方式而广受欢迎。随着时间的…

Photos框架 - 自定义媒体选择器(UI预览)

引言 在前面的博客中我们已经介绍了使用媒体资源数据的获取&#xff0c;以及自定义的媒体资源选择列表页。在一个功能完整的媒体选择器中&#xff0c;预览自然是必不可少的&#xff0c;本篇博客我们就来实现一个资源的预览功能&#xff0c;并且实现列表和预览的数据联动效果。…

GLSL教程 第9章:计算着色器

目录 9.1 计算着色器的基本概念 计算着色器的主要特点&#xff1a; 9.2 计算着色器的基础知识 1. 创建计算着色器 计算着色器代码&#xff1a; 2. 编译和链接计算着色器 示例代码&#xff1a; 3. 执行计算着色器 示例代码&#xff1a; 9.3 实现并行计算和数据并行处理…

SD-WAN 的真相以及它如何支持企业数字化转型

企业需要灵活、安全的网络解决方案&#xff0c;以支持随时随地工作模式和多云策略&#xff0c;他们正在转向软件定义广域网 (SD-WAN) 技术来实现这一目标。 其操作简单、独立于运营商的 WAN 连接和改进的安全功能可提供直接云访问&#xff0c;并为安全访问服务边缘 (SASE) 策略…

字典树、并查集适用于算法竞赛

字典树 题目&#xff1a;835. Trie字符串统计 - AcWing题库 又称单词查找树&#xff0c;Trie树&#xff0c;是一种树形结构&#xff0c;是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以…

C++初学者指南-6.函数对象--函数对象

C初学者指南-6.函数对象–函数对象 文章目录 C初学者指南-6.函数对象--函数对象函数对象示例&#xff1a;区间查询区间内的查找区间划分(分组) 指南标准库函数对象比较算术运算 函数对象 提供至少一个成员函数重载 operator() 的对象 class Multiplier {int m_; public:// cons…

还在用if校验参数?SpringBoot使用validation优雅实现参数校验

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru (更多精彩内容可进入主页观看) &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 目录 一、前…

鸿蒙APP架构及开发入门

1.鸿蒙系统 1.1 什么是鸿蒙 鸿蒙是一款面向万物互联时代的、全新的分布式操作系统。 在传统的单设备系统能力基础上&#xff0c;鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、…

深入解析食堂采购系统源码:打造高效食材供应链APP的核心

本篇文章&#xff0c;笔者将从系统架构、关键模块、技术选型和优化策略等方面&#xff0c;深入解析食堂采购系统的源码&#xff0c;为您揭示打造高效食材供应链APP的核心要点。 一、系统架构 食堂采购系统通常采用分层架构&#xff0c;以保证系统的可维护性和扩展性。主要包括…

Android 列表或网格形式展示大量数据:RecyclerView(二):缓存复用

一、缓存复用 为什么要了解这个呢&#xff1f;当我们rv出现卡顿&#xff0c;出现闪烁的时候&#xff0c;你应该如何优化呢&#xff1f; 为什么有时候onCreateViewHolder会被调用&#xff1f;onBindVilewHolder会被调用呢&#xff1f; visiable的使用&#xff0c;会导致重新绘制…

Linux---git工具

目录 初步了解 基本原理 基本用法 安装git 拉取远端仓库 提交三板斧 1、添加到缓存区 2、提交到本地仓库 3、提交到远端 其他指令补充 多人协作管理 windows用户提交文件 Linux用户提交文件 初步了解 在Linux中&#xff0c;git是一个指令&#xff0c;可以帮助我们做…

jionlp根据词典进行行政区划补全

背景 需要对地址数据进行行政区划补全的,可以用下面的方法,当然是有条件限制的,只限于提供本省的词典和补全本身的地址数据,否则容易错乱 效果测试 lp = LocationParser() loc = 侨英街道乐海南里170号 res = lp(loc) print(res)1、安装或者更新 python安装 pip insta…