多设备调试 adb 脚本

做为安卓开发工程师,adb 是使用频率非常高的工具,但是当电脑连接了多个 android 手机或虚拟机设备后,每次使用 adb 都需要通过 -s 参数手动指定调试哪个设备,输入繁琐。例如:

adb -s E0014021600090 logcat
复制代码

可能有人会说,可以断开暂时不想调试的设备,每次保证只连接一个调试的设备。但是在需要频繁多个设备间调试的场景下,该操作还是比较麻烦的。

此时,就非常希望在我们输入 adb 命令时,如果存在多个设备,则提示我们选择哪个设备(输入设备序号)进行调试,无须输入繁琐的设备序列号参数,也不用频繁的插拔数据线。

为此写了个 adb 的封装脚本(仅支持 mac 和 linux 系统),脚本内容:

#!/bin/bash
export PATH

#使用前配置本地 adb 的路径
adb='/Users/luliang/Library/Android/sdk/platform-tools/adb'

if [ ! -f $adb ]; then
    echo "adb 路径配置有误,请修正该脚本中 adb 的路径"
    exit 1
fi

#部分 adb 参数不需要选择具体某个设备的白名单列表
whiteList=(
    devices
    start-server
    kill-server
)

if [[ "$@" == "" ]]; then
    "$adb" "$@"
    exit $?
fi

if [[ "${whiteList[@]}"  =~ "$1" ]]; then
    "$adb" "$@"
    exit $?
fi

if [[ $1 == "-s" ]]; then
    "$adb" "$@"
    exit $?
fi

devices=`$adb devices | sed -n '2,$p' | cut -d '	' -f 1`

count=`echo "$devices" | wc -l`

if [$count -gt 1 ]; then
    i=1
    echo -e "Num\tSN (Device)"
    while(($i<="$count"));do
        device=`echo "$devices" | sed -n "${i}p"`
        brand=`$adb -s $device shell getprop ro.product.brand`
        model=`$adb -s $device shell getprop ro.product.model`
        echo -e " $i\t$device ($brand $model)"
        i=$(($i+1))
    done
    read -p "choose the device number: " ID
    device=`echo "$devices" | sed -n "${ID}p"`
    "$adb" "-s" $device "$@"
else
    "$adb" "$@"
fi
复制代码

使用说明:

步骤一:脚本中的 adb 路径变量需要修改成本地的 adb 路径,如果你之前配置过 adb 的环境变量,可以快速通过命令获知。

which adb
复制代码

步骤二:将脚本命名为 adb 保存到某个具体路径,比如主用户目录下的 shells 目录(~/shells),给该文件新增可执行权限:

chmod a+x ~/shells/adb
复制代码

步骤三:将该路径添加到环境变量配置文件~/.bashrc 或者~/.zshrc(如果使用 zsh) 中,比如

export PATH=/Users/luliang/shells:$PATH
复制代码

此外,如果之前配置过 adb 路径,需要去掉之前的环境变量配置。保证执行 adb 时运行的是脚本文件。

接下来就可以像平时使用 adb 一样,来运行这个脚本了。当少于2个 android 设备连接时,运行效果跟平时的 adb 一样,当有多个设备时,会提示选择使用哪个设备进行调试。

运行效果:

$ adb logcat
N0.	SN (Device)
 1	988d50414347355443 (samsung SM-G9500)
 2	E0014021600090 (smartisan yq601)
choose the device number: 2
复制代码

为方便区分不同的设备,设备列表的序列号后面还提供了设备品牌和型号。

只需要输入指定调试的设备序号,会自动执行类似 adb -s {SN} logcat 的命令,大大提高了多设备的调试效率。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享