安卓猿的ADB骚操作

19次阅读

共计 3056 个字符,预计需要花费 8 分钟才能阅读完成。

前言

当前 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 快捷命令
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
}

正文完
 0