Android 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  
root@pone:/ # exit
# 选择默认连接设备
$ adbsetenv  
1) 7f7c509e  
2) 0123456789  
3) 123   
4) 2.2.2.108:5555  
#? 2  
$ okadb shell  
select android device is 0123456789  
root@d508:/ # 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
# 选择其中一个设备修改名字,请勿选择网络连接着的设备,如果修改了网络连接这的USB设备,网络设备会自动断开 
$ 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: momo0853@live.com
# 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 $@
        return 0
    fi

    dev="$(select_device)"
    echo "select android device is $dev"
    if test -n "$dev"; then
        adb -s $dev $@
        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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值