安卓猿的ADB骚操作

前言

当前PC连着多个安卓设备时,当超出了 adb 所支持的设备数,步骤如下:

  • adb devices 列出你当前的设备列表,然后拷贝你要安装的设备Device Id; 使用 adb -s deviceId
  • install …. 来进行 APK 安装
error: more than one device/emulator
adb: error: failed to get feature set: more than one device/emulator
- waiting for device -
error: more than one device/emulator

效果图

《安卓猿的ADB骚操作》

#adb 快捷命令
function adbConnect(){
    echo "Your connect is 192.168.$1"   # 这个 $1 必须要参考底下命令的下达
    adb connect 192.168.$1
}

function adbDisconnect(){
    adb disconnect
}

function adbShell(){
    adb shell
}

function devices(){
    adb devices
}

# 获取安卓设备数量
function getAdbDevicesCount(){
    no_dev=2 #没有设备的总行数   第一行: List of devices attached  第二行 空
    line="`adb devices | wc -l`"
    # echo "$line"
    echo $(($line-$no_dev))
}

#获取自定义格式设备名称 参数1: adb devices 设备ID index
function getFmtDeviceName(){
  if [ -n "$1" ]; then
    line=$1
    let "line++" #跳过1行
    deviceId="`adb devices | sed -n "${line}p" | awk '{printf $1"\n"}' `"     # name="`adb devices | sed -n "2p;${line}p" | awk '{printf NR ". " $1"\n"}' `" #简单列出设备ID
    manufacturer="`adb -s $deviceId shell getprop ro.product.manufacturer`"
    model="`adb -s $deviceId shell getprop ro.product.model`"
    version="`adb -s $deviceId shell getprop ro.build.version.release`"
    sdk="`adb -s $deviceId shell getprop ro.build.version.sdk`"
    name="${manufacturer} ${model} Android ${version} API ${sdk} Serial: ${deviceId} "
    # 去除某些设备后面携带回车符
    name=`echo ${name} | tr -d '\r'`
    echo ${name}
  else
    echo "requires an argument"
  fi
}

# 列出所有设备
function listFmtDevices(){
  count=`getAdbDevicesCount`
  index=1
  while(( $index<=count ))
  do
    name=`getFmtDeviceName ${index}`
    echo "${index}. ${name} "
    let "index++"
  done
}

# 获取设备ID 参数1: adb devices 设备ID index
function getFmtDeviceId(){
  if [ -n "$1" ]; then
    line=$1
    let "line++" #跳过1行
    deviceId="`adb devices | sed -n "${line}p" | awk '{printf $1"\n"}' `"
    # 去除某些设备后面携带回车符
    deviceId=`echo ${deviceId} | tr -d '\r'`
    echo ${deviceId}
  else
    echo "requires an argument"
  fi
}

# 安装apk
function apk(){
  if [ -n "$1" ]; then
    count=`getAdbDevicesCount`
    one_dev=1
    if [ $count -eq $one_dev ]
    then
      # 单设备
      name=`getFmtDeviceName 1`
      echo "install apk to devices: ${name}"
      adb install -r $1
    elif [ $count -gt $one_dev ] 
    then 
      # 多设备
      if [ -n "$2" ]; then
        # 带设备index
        index=$2
        deviceId=`getFmtDeviceId ${index}`
        name=`getFmtDeviceName ${index}`
        echo "install apk to devices: $name"
        adb -s $deviceId install -r $1
      else
        # 带apk文件路径
        echo "install apk to which devices?"
        listFmtDevices
        read -p "Enter: " index
        apk $1 $index
      fi
    else
      echo "no devices"
    fi
  else
    echo "apk requires an apkPath argument"
  fi
}

# 卸载apk
function uapk(){
  if [ -n "$1" ]; then
    count=`getAdbDevicesCount`
    one_dev=1
    if [ $count -eq $one_dev ]
    then
      # 单设备
      name=`getFmtDeviceName 1`
      echo "uninstall apk on $name"
      adb uninstall $1
    elif [ $count -gt $one_dev ] 
    then 
      # 多设备
      if [ -n "$2" ]; then
        # 带设备index
        index=$2
        deviceId=`getFmtDeviceId ${index}`
        name=`getFmtDeviceName ${index}`
        echo "uninstall apk on devices: $name"
        adb -s $deviceId uninstall $1
      else
        # 带apk文件路径
        echo "uninstall apk on which devices?"
        listFmtDevices
        read -p "Enter: " index
        uapk $1 $index
      fi
    else
      echo "no devices"
    fi
  else
    echo "uapk requires an pkg argument"
  fi
}

# 进入adb shell 环境
function as(){
  count=`getAdbDevicesCount`
  one_dev=1
  if [ $count -eq $one_dev ]
  then
    # 单设备
    name=`getFmtDeviceName 1`
    echo "${name} Last login: `date`"
    adb shell
  elif [ $count -gt $one_dev ] 
  then 
    # 多设备
    if [ -n "$1" ]; then
      # 带设备index
      index=$1
      deviceId=`getFmtDeviceId ${index}`
      name=`getFmtDeviceName ${index}`
      echo "${name} Last login: `date`"
      adb -s $deviceId shell
    else
      # 不带设备index
      echo "enter shell which devices?"
      listFmtDevices
      read -p "Enter: " index
      as $index
    fi
  else
    echo "no devices"
  fi
}
    原文作者:iflove
    原文地址: https://segmentfault.com/a/1190000019485083
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞