做为安卓开发工程师,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