Android 快速查找当前页面Activity名称(三种办法)
# 主要分两种方式进行查找## 第一种:通过Android studio 自带工具查找在顶部菜单执行如下操作:tools-->layout inspector然后选中对应de
·
Github地址:GitHub - Weipiru/AndroidAdbDebugScrip: 整理一些常用的Android调试脚本
主要分两种方式进行查找
第一种:通过Android studio 自带工具查找
在顶部菜单执行如下操作:tools-->layout inspector
然后选中对应的设备即可看到所有打开的activity
然后 把名字记下来,查找这个名字,比较麻烦
第二种:通过脚本控制命令行获取数据,自行解析并复制到粘贴板
主要用到命令:
adb shell dumpsys activity|findstr ResumedActivit
之后,我们需要做的是把返回的结果进行切割复制到粘贴版即可,这里使用python环境完成,代码如下:
import os
import win32con
import win32clipboard
import sys
dev_list = []
class Activity_Model:
def __init__(self):
self.activity_name = ''
self.full_act_name = ''
self.app_id = ''
def __str__(self):
return self.full_act_name
class Device_Model:
def __init__(self):
self.id = ''
self.status = ''
self.product = ''
self.model = ''
self.device = ''
self.transport_id = ''
def copy(text):
"""复制"""
win32clipboard.OpenClipboard() # 打开剪贴板
win32clipboard.EmptyClipboard() # 清空剪贴板内容。可以忽略这步操作,但是最好加上清除粘贴板这一步
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, text) # 以Unicode文本形式放入剪切板
win32clipboard.CloseClipboard() # 关闭剪贴板
def select_devices():
cmd_exr = os.popen('adb devices -l')
result = cmd_exr.read().rstrip()
lines = result.splitlines()
if len(lines) == 2:
device = get_device(lines[1])
print('use device %s' % device.id)
return device.id
else:
global dev_list
dev_list.clear()
for index, dev in enumerate(lines):
if index == 0:
continue
dev = get_device(dev)
print('%d、%s %s - %s %s' % (index - 1, dev.id, dev.model, dev.device, dev.status))
dev_list.append(dev.id)
sel = 0
if len(dev_list) == 0:
print('没有设备')
input('按下 Enter 结束......')
sys.exit(0)
try:
sel = int(input('存在多个设备,请输入序号[0]: '))
except Exception as e:
sel = 0
if sel >= len(dev_list):
sel = len(dev_list) - 1
return dev_list[sel]
def get_device(device_line):
arr = device_line.split()
# print(arr)
dev_mod = Device_Model()
dev_mod.id = arr[0]
dev_mod.status = arr[1]
try:
temp_arr = arr[4].split(':')
dev_mod.device = temp_arr[1]
except Exception as e:
dev_mod.device = '无法获取'
try:
temp_arr = arr[2].split(':')
dev_mod.product = temp_arr[1]
except Exception:
dev_mod.product = '未知'
try:
temp_arr = arr[3].split(':')
dev_mod.model = temp_arr[1]
except Exception:
dev_mod.model = '未知'
return dev_mod
def parse_line(line):
arr = line.lstrip().rstrip().split(' ')
for element in arr:
if '/' in element:
activity_model = Activity_Model()
arr = element.split('/')
activity_model.app_id = arr[0]
activity_model.full_act_name = arr[1]
arr = activity_model.full_act_name.split('.')
activity_model.activity_name = arr[len(arr) - 1]
return activity_model
if __name__ == '__main__':
dev_id = select_devices()
cmd = 'adb -s {} shell dumpsys activity|findstr ResumedActivit'.format(dev_id)
print(cmd)
cmd_exr = os.popen(cmd, mode='r')
result = cmd_exr.read()
activities = []
for line in result.splitlines():
model = parse_line(line)
if model is None:
continue
exist = False
for e in activities:
if e.full_act_name == model.full_act_name:
exist = True
break
if exist is False:
activities.append(model)
if len(activities) == 1:
temp_model = activities[0]
print('copy: %s' % temp_model.activity_name)
copy(temp_model.activity_name)
elif len(activities) == 0:
print('没有找到任何Activity')
input('按下 Enter 退出')
sys.exit(0)
else:
print('发现多个Activity:')
print(len(activities))
for index, element in enumerate(activities):
print('%d、%s' % (index, element.full_act_name))
ipt = int(input('输入目标索引:'))
act = activities[ipt]
print('你选择了 %s' % act)
copy(act.activity_name)
第三种:使用Logcat输出当前Activity名称
我们可以在Application中注册一个全局的生命周期监听,如下:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityResumed(Activity activity) {
Log.i("ActivityName", activity.getLocalClassName());
}
//...省略其他重写
});
之后我们就可以在logcat中看到输出的名称了
更多推荐
已为社区贡献1条内容
所有评论(0)