adb多设备管理

由于开发机中总是同时连着好几个设备,而我们的设备大部都有着相同的名字,而且我们可能同时操作着好几个设备,为了解决这个问题写了个shell脚本对这些设备进行管理,方便开发。

功能简介:

1. 如果存在设备环境变量(ANDROID_SERIAL),并且设备的环境变量存在那么就使用设备环境变量的值,否则就从已经存在的设备选择一个。

2. 为okadb添加了自动补全的功能,仅仅添加了几个我常用的。

3. 整合一些常用的功能。

4. 设置设备名字这个函数默认名字为"123",设置设备环境变量默认是选择已经存在的设备,如果传null这取消设备环境变量。

简单使用:

$ source okadb.sh
$ adbsetenv null
$ okadb shell
1) 7f7c509e
2) 0123456789
3) 123
4) 2.2.2.108:5555
#? 4
select android device is 2.2.2.108:5555
[email protected]:/ # exit
$ adbsetenv
1) 7f7c509e
2) 0123456789
3) 123
4) 2.2.2.108:5555
#? 2
$ okadb shell
select android device is 0123456789
[email protected]:/ # exit
$ adbsetenv null
$ okadb tcpip 5555
1) 7f7c509e
2) 0123456789
3) 123
4) 2.2.2.108:5555
#? 1
select android device is 7f7c509e
restarting in TCP mode port: 5555
$ adbrename myname
1) 0123456789
2) 123
3) 2.2.2.108:5555
4) 7f7c509e
#? 1
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
7f7c509e    device
123 device
myname  device

脚本代码如下:

#!/bin/bash

# Author: [email protected]
# Time  : Fri May 29 18:04:09 CST 2015

_okadb()
{
	local cur prev opts
	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"
	opts="shell push pull install tcpip usb logcat root reboot 		reboot-bootloader forward devices kill-server remount"

	case "$prev" in
		shell | pull | reboot-bootloader | logcat | devices 			| kill-server | root | remount)
			COMPREPLY=()
			return 0
			;;
		reboot)
			COMPREPLY=( $(compgen -W "bootloader recovery" -- $cur) )
			return 0
			;;
		push)
			COMPREPLY=( $(compgen -o default -o plusdirs -f -- $cur) )
			return 0
			;;
		*)
			local prev2="${COMP_WORDS[COMP_CWORD-2]}"
			if [ "$prev2" == "push" ] || [ "$prev2" == "reboot" ];then
				return 0
			fi
			;;
	esac

	COMPREPLY=( $(compgen -W "$opts" -- $cur) )
	return 0
}

select_device()
{
	# if env dev exist && find it, use it. || choose one of the devices.
	if test $# -eq 0 -a -n "${ANDROID_SERIAL}"; then
		local env_dev="${ANDROID_SERIAL}"
		local devs=( `adb devices` )
		local env_dev_status=0

		# find the env device
		for t in ${devs[@]}; do
			if test "$t" = "$env_dev"; then
				env_dev_status=1
				break
			fi
		done

		if test ${env_dev_status} -eq 1; then
			echo ${env_dev}
			return 0
		fi
	fi

	local c=0 s=0 devs sel_dev
	devs=( `adb devices` )
	for (( c=0; c < ${#devs[@]}; c++ )); do
		if test "device" = ${devs[c]}; then
			t=$((c-1))
			#echo ${devs[$t]}
			sel_dev[$s]=${devs[$t]}
			s=$((++s))
		fi
	done

	#echo "${sel_dev}"
	if test ${#sel_dev[*]} -ge 2; then
		select var in ${sel_dev[*]}; do
			break;
		done
		echo $var
		return 0
	else
		echo ${sel_dev}
		return 0
	fi
	echo
	return 1
}

okadb()
{
	if test $# -eq 1 -a "$1" = "devices"; then
		adb [email protected]
		return 0
	fi

	dev="$(select_device)"
	echo "select android device is $dev"
	if test -n "$dev"; then
		adb -s $dev [email protected]
		return 0
	fi
	adb devices
	return 1
}

# add automatic completion for okadb
complete -F _okadb okadb

adbconnect()
{
	# FIX ME
	adb connect 2.2.2.$1
}

adbdisconnect()
{
	dev="$(select_device)"
	adb disconnect $dev
}

adbrestart()
{
	adb kill-server
	adb start-server
}

adblg()
{
	dev="$(select_device)"
	adb -s $dev logcat
}

adblgt()
{
	dev="$(select_device)"
	adb -s $dev logcat -v time
}

adblgth()
{
	dev="$(select_device)"
	adb -s $dev logcat -v threadtime
}

adbrename()
{
	dev="$(select_device)"
	name="123"
	if test -n "$1"; then
		name="$1"
	fi
	adb -s $dev shell "echo "$name" > /sys/class/android_usb/android0/iSerial"
	adbrestart
	adb devices
}

adbsetenv()
{
	if test $# -eq 1 -a "$1" = "null"; then
		export ANDROID_SERIAL=""
	else
		dev="$(select_device)"
		export ANDROID_SERIAL="$dev"
	fi
}
时间: 2024-12-13 01:20:26

adb多设备管理的相关文章

ADB(调试桥)- 设备管理工具

一. ADB简介 1. ADB全称是Android Debug Bridge,是Android SDK里自带的一个工具,用这个工具可以直接操作管理Android模拟器(Emulator)或者是真实的Android设备 2. ADB的功能很多,我们主要用到的功能有: a. 运行设备的 shell 命令行 b. 管理模拟器或设备的端口映射 c. 计算机和设备之间上传/下载文件 d. 将本地apk软件包安装至模拟器或Android设备上 3. ADB是一个客户端 - 服务器端程序,其中客户端是用来操作

adb正常,手机启动usb调试,adb devices下没有改设备

手机开启开发者模式,adb正常时adb devices下没有设备: 1.进入设备管理器--查找adb的硬件id 2.找到.Android文件夹,在下,添加0x22D9 3.杀掉adb进程,重启启动adb即可链接成功

[异常解决] android stdio检测不到手机的解决办法——ADB驱动自己安装

用android stdio搭建安卓开发环境比eclipse简单的多,仅仅下载一个1个G左右的安装包安装即可. 安装好之后随便建一个hello world工程,想用实体手机调试要点: 选择USB设备: 这样点击编译运行后,在下面的提示框中就能看到log信息: 特别的:有时候手机插上电脑后驱动总是安装失败(查看设备管理器显示ADB接口有个感叹号),此时可以自己下载一个ADB驱动手动安装即可: http://pan.baidu.com/s/1bbrTAQ

adb devices 找不到设备怎么办 --- 2

问题现象:在电脑上安装好手机驱动后,手机进入设置---->应用程序---->开发----->勾选USB调试后连接电脑,,在CMD命令中输入adb devices发现没有设备. 解决方法:开始菜单-->计算机(右键)-->设备管理器,找到设备,如下图 双击设备驱动,在弹出的菜单中选中“详细信息”tab页. 在下拉菜单中选中“硬件 Id” 记录VID后的数字,此处为1EBF. 在C:\Users\lenovo\.android文件夹中找到adb_usb.ini文件,打开,在文件中

终于用ADB连上平板了

可以看到设备管理器里, ADB Interface 设备装不上驱动. 1,百度到的内容,没有一个靠谱的. 2,google到内容了, 却因为看的不仔细,浪费了好多时间...(android自己的文章都是有问题的) 下面的才是正确的,注意红字!!! Step 1: Download Android SDK: Android SDK download link Scroll to the bottom of the page linked above, then click on “Download

adb devices 不识别设备(或者偶尔识别设备) -破解

问题:当在CMD中输入adb devices时,没有设备信息显示,居然显示下面的信息 问题是有时候可以识别,有时候不可以识别.当被别人连接后,自己在连接是好的,过了一会以后又不好了 解决方案: 一.当设备一直不显示设备的时候: 1.检查USB调试模式是否打开 2.检查驱动是否安装对,检查方法:连接PC后,打开设备管理器,检查是否有叹号,问号,等异常显示 3.尝试切换电脑的USB接口,验证是不是每个接口都不行 4.尝试更换USB线,排除的线的问题. 5.检查adb 端口是否被占用 方法: 在cmd

Windows下ADB使用相关问题

Windows下ADB使用相关问题 适用环境: 在Windows XP,WIN7下均可按本文操作进行:WIN8下没有进行实验,但操作设置大致相同,除了第4步,adb_usb.ini的位置可能有所不同以外,其他各部分可按文中所述进行操作. Windows下正常使用ADB要注意以下问题: 1.      手机端要打开调试模式 在设置中,打开开发人员选项,并将其中的USB调试选项打开 2.     PC端安装设备驱动 各家设备的USB驱动可能有所不同,这里以展讯为例. 安装驱动时要先把设备与PC断开.

Android 开发中常用 ADB 命令总结

adb 的全称为 Android Debug Bridge,就是起到调试桥的作用.通过 adb 我们可以在 Eclipse 中方便通过 DDMS 来调试 Android 程序,说白了就是 debug 工具.adb 的工作方式比较特殊,采用监听 Socket TCP 5554 等端口的方式让 IDE 和 Qemu 通讯,默认情况下 adb 会 daemon 相关的网络端口,所以当我们运行 Eclipse 时 adb 进程就会自动运行.作为开发人员,掌握适当所需要的 ADB 操作命令是非常必须的.就

ADB故障时的一些命令

开发中经常用到adb重启等操作,简单记录一下. 1.重启 adb kill-server adb start-server 2.显示版本号 adb version 3.显示已连接的设备 adb devices 4.adb重启后没有找到设备,重启一般都能解决,但重启花时间 用设备管理器查看安卓设备的“硬件id”,记录下vid后面的XXXXX  如 VID_17EF 打开 %userprofile%\.android\adb_usb.ini,在最后一行填入0x17EF,保存后重启adb即可.