$ adb --help
...
-s SERIAL使用给定序列的设备(覆盖$ ANDROID_SERIAL)
$ adb设备附加设备列表模拟器-5554设备7f1c864e设备
$ adb shell -s 7f1c864e错误:多个设备和模拟器
?
你不应该输入:
adb -s 7f1c864e shell
?http://developer.android.com/tools/help/adb.html#directingcommands
当连接多个设备时,gist将为您显示菜单做大部分工作:
$ adb $(android-select-device) shell 1) 02783201431feeee device 3) emulator-5554 2) 3832380FA5F30000 device 4) emulator-5556 Select the device to use, <Q> to quit:
为避免键入,您只需创建一个包含设备选择的别名,如here所述 .
创建一个Bash(tools.sh)以从设备(或模拟器)中选择一个序列:
clear; echo "===================================================================================================="; echo " ADB DEVICES"; echo "===================================================================================================="; echo ""; adb_devices=( $(adb devices | grep -v devices | grep device | cut -f 1)#$(adb devices | grep -v devices | grep device | cut -f 2) ); if [ $((${#adb_devices[@]})) -eq "1" ] && [ "${adb_devices[0]}" == "#" ] then echo "No device found"; echo ""; echo "===================================================================================================="; device="" // Call Main Menu function fxMenu; else read -p "$( f=0 for dev in "${adb_devices[@]}"; do nm="$(echo ${dev} | cut -f1 -d#)"; tp="$(echo ${dev} | cut -f2 -d#)"; echo " $((++f)). ${nm} [${tp}]"; done echo ""; echo " 0. Quit" echo ""; echo "===================================================================================================="; echo ""; echo ' Please select a device: ' )" selection error="You think it's over just because I am dead. It's not over. The games have just begun."; // Call Validation Numbers fxValidationNumberMenu ${#adb_devices[@]} ${selection} "${error}" case "${selection}" in 0) // Call Main Menu function fxMenu; *) device="$(echo ${adb_devices[$((selection-1))]} | cut -f1 -d#)"; // Call Main Menu function fxMenu; esac fi
然后在另一个选项中可以使用 adb -s (全局选项-s使用具有覆盖$ ANDROID_SERIAL的给定序列号的设备):
adb -s
adb -s ${device} <command>
我在MacOS终端上测试了这段代码,但我认为它可以在Git Bash Terminal的Windows上使用 .
还要记得在 .bash_profile 文件中配置环境变量和Android SDK路径:
.bash_profile
export ANDROID_HOME="/usr/local/opt/android-sdk/" export PATH="$ANDROID_HOME/platform-tools:$PATH" export PATH="$ANDROID_HOME/tools:$PATH"
对于Windows,这是一个如何在多个设备上安装文件的快速示例
FOR /F "skip=1" %x IN ('adb devices') DO start adb -s %x install -r myandroidapp.apk
如果您计划将其包含在批处理文件中,请将%x替换为%% x,如下所示
FOR /F "skip=1" %%x IN ('adb devices') DO start adb -s %%x install -r myandroidapp.apk
另一种方法是将环境变量ANDROID_SERIAL设置为相关的序列,这里假设您使用的是Windows:
set ANDROID_SERIAL="7f1c864e" echo %ANDROID_SERIAL% "7f1c864e"
然后你可以使用 adb.exe shell 没有任何问题 .
adb.exe shell
adb -d shell (如果您要连接到模拟器,则为 adb -e shell ) .
adb -e shell
如果您懒得输入完整ID,此命令将在大多数情况下为您提供帮助 .
来自http://developer.android.com/tools/help/adb.html#commandsummary:
-d - 将adb命令指向唯一连接的USB设备 . 连接多个USB设备时返回错误 . -e - 将adb命令指向唯一正在运行的模拟器 . 运行多个仿真器时返回错误 .
Running adb commands on all connected devices
创建一个bash(adb)
adb devices | while read line do if [ ! "$line" = "" ] && [ `echo $line | awk '{print $2}'` = "device" ] then device=`echo $line | awk '{print $1}'` echo "$device $@ ..." adb -s $device $@ fi
完成使用它
adb //命令
用户 @janot 已经在上面提到了这一点,但这需要一些时间来过滤最佳解决方案 .
@janot
有两个广泛的用例:
1)连接2个硬件,首先是仿真器,另一个是设备 .Solution : adb -e shell....whatever-command 用于模拟器, adb -d shell....whatever-command 用于设备 .
adb -e shell....whatever-command
adb -d shell....whatever-command
2)通过USB / ADB-WiFi连接了多个设备(所有仿真器或电话/平板电脑):
Solution :Step1)运行 adb devices 这将为您提供当前连接的设备列表(通过USB或ADBoverWiFI)Step2)现在运行 adb -s <device-id/IP-address> shell....whatever-command ,无论你有多少设备 .
adb devices
adb -s <device-id/IP-address> shell....whatever-command
Example要清除在无线ADB上连接的设备上的应用数据,我会执行:adb -s 172.16.34.89:5555 shell pm clear com.package-id
adb -s 172.16.34.89:5555 shell pm clear com.package-id
要清除连接在我的usb连接设备上的应用数据,我会执行:adb -s 5210d21be2a5643d shell pm clear com.package-id
adb -s 5210d21be2a5643d shell pm clear com.package-id
我看到“多个设备”错误后发现了这个问题,其中有2个离线手机显示:
C:\Program Files (x86)\Android\android-sdk\android-tools>adb devices List of devices attached SH436WM01785 offline SH436WM01785 offline SH436WM01785 sideload
如果只连接了一个设备,请运行以下命令以消除脱机连接:
adb kill-server adb devices
9 回答
你不应该输入:
?
http://developer.android.com/tools/help/adb.html#directingcommands
当连接多个设备时,gist将为您显示菜单做大部分工作:
为避免键入,您只需创建一个包含设备选择的别名,如here所述 .
创建一个Bash(tools.sh)以从设备(或模拟器)中选择一个序列:
然后在另一个选项中可以使用
adb -s
(全局选项-s使用具有覆盖$ ANDROID_SERIAL的给定序列号的设备):我在MacOS终端上测试了这段代码,但我认为它可以在Git Bash Terminal的Windows上使用 .
还要记得在
.bash_profile
文件中配置环境变量和Android SDK路径:对于Windows,这是一个如何在多个设备上安装文件的快速示例
如果您计划将其包含在批处理文件中,请将%x替换为%% x,如下所示
另一种方法是将环境变量ANDROID_SERIAL设置为相关的序列,这里假设您使用的是Windows:
然后你可以使用
adb.exe shell
没有任何问题 .adb -d shell (如果您要连接到模拟器,则为
adb -e shell
) .如果您懒得输入完整ID,此命令将在大多数情况下为您提供帮助 .
来自http://developer.android.com/tools/help/adb.html#commandsummary:
Running adb commands on all connected devices
创建一个bash(adb)
完成使用它
adb //命令
用户
@janot
已经在上面提到了这一点,但这需要一些时间来过滤最佳解决方案 .有两个广泛的用例:
1)连接2个硬件,首先是仿真器,另一个是设备 .
Solution :
adb -e shell....whatever-command
用于模拟器,adb -d shell....whatever-command
用于设备 .2)通过USB / ADB-WiFi连接了多个设备(所有仿真器或电话/平板电脑):
Solution :Step1)运行
adb devices
这将为您提供当前连接的设备列表(通过USB或ADBoverWiFI)Step2)现在运行
adb -s <device-id/IP-address> shell....whatever-command
,无论你有多少设备 .Example
要清除在无线ADB上连接的设备上的应用数据,我会执行:
adb -s 172.16.34.89:5555 shell pm clear com.package-id
要清除连接在我的usb连接设备上的应用数据,我会执行:
adb -s 5210d21be2a5643d shell pm clear com.package-id
我看到“多个设备”错误后发现了这个问题,其中有2个离线手机显示:
如果只连接了一个设备,请运行以下命令以消除脱机连接: