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

STK 12.9 feature highlights

STK 12.9 feature highlights The workflow for viewing, adding, deleting, and modifying an object’s active Access Constraints has been completely revamped. Using the “Active Constraints” panel in an object’s Properties Browser, you can view all active A…

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;">●●●<…

java的插桩

可以参考这个&#xff0c;利用Gradle Transform可以实现精准插桩&#xff1a;https://www.51cto.com/article/713694.html

后端面试题日常练-day09 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 Java中的静态方法和实例方法有何区别&#xff1f; a) 静态方法可以直接通过类名调用&#xff0c;实例方法需要通过对象实例调用 b) 静态方法可以访问实例变量&#xff0c;实例方法可以访问静态变量 c)…

[Python][文件]详细讲解

目录 1.文件操作1.打开文件2.关闭文件3.写文件4.读文件 2.上下文管理器 1.文件操作 1.打开文件 使用内建函数open()打开一个文件f open(D:/test.txt, r)参数&#xff1a; 第一个参数是一个字符串&#xff0c;表示要打开的文件路径第二个参数是一个字符串&#xff0c;表示打开…

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…

react的State生命周期

React的State和生命周期是React框架中非常重要的概念&#xff0c;它们共同协作以实现组件的动态更新和高效渲染。以下是对React的State和生命周期的详细解析&#xff1a; React的State 定义与作用&#xff1a; 状态&#xff08;State&#xff09;是React组件内部的数据源&am…

python_从sqlite导出数据至Excel

cursor.fetchall()的方式 import sqlite3 from openpyxl import Workbook# 数据库文件名 db_file D:\\desktop\\ni.db# XLSX 文件名 xlsx_file D:\\desktop\\output2.xlsx# 连接到数据库 conn sqlite3.connect(db_file) cursor conn.cursor()# 执行查询 cursor.execute(&q…

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…