美文网首页安卓集中营
Shell下的adb 快捷命令

Shell下的adb 快捷命令

作者: 任半生嚣狂 | 来源:发表于2019-06-11 00:47 被阅读1次

    前言

    当前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}  ID ${deviceId}"
        # 去除某些设备后面携带回车符
        name=`echo ${name} | tr -d '\r'`
        echo ${name}
      else
        echo "requires an argument"
      fi
    }
    
    # 获取设备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?"
            index=1
            while(( $index<=count ))
            do
              name=`getFmtDeviceName ${index}`
              echo "${index}. ${name} "
              let "index++"
            done
            read 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?"
            index=1
            while(( $index<=count ))
            do
              name=`getFmtDeviceName ${index}`
              echo "${index}. ${name} "
              let "index++"
            done
            read 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?"
          index=1
          while(( $index<=count ))
          do
            name=`getFmtDeviceName ${index}`
            echo "${index}. ${name} "
            let "index++"
          done
          read index
          as $index
        fi
      else
        echo "no devices"
      fi
    }
    

    相关文章

      网友评论

        本文标题:Shell下的adb 快捷命令

        本文链接:https://www.haomeiwen.com/subject/ehbxfctx.html