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中看到输出的名称了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐