安卓猿的ADB騷操作

前言

當(dāng)前PC連著多個(gè)安卓設(shè)備時(shí),當(dāng)超出了 adb 所支持的設(shè)備數(shù),步驟如下:

  • adb devices 列出你當(dāng)前的設(shè)備列表,然后拷貝你要安裝的設(shè)備Device Id; 使用 adb -s deviceId
  • install .... 來(lái)進(jìn)行 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"   # 這個(gè) $1 必須要參考底下命令的下達(dá)
    adb connect 192.168.$1
}

function adbDisconnect(){
    adb disconnect
}

function adbShell(){
    adb shell
}

function devices(){
    adb devices
}

# 獲取安卓設(shè)備數(shù)量
function getAdbDevicesCount(){
    no_dev=2 #沒(méi)有設(shè)備的總行數(shù)   第一行: List of devices attached  第二行 空
    line="`adb devices | wc -l`"
    # echo "$line"
    echo $(($line-$no_dev))
}

#獲取自定義格式設(shè)備名稱 參數(shù)1: adb devices 設(shè)備ID index
function getFmtDeviceName(){
  if [ -n "$1" ]; then
    line=$1
    let "line++" #跳過(guò)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"}' `" #簡(jiǎn)單列出設(shè)備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} "
    # 去除某些設(shè)備后面攜帶回車(chē)符
    name=`echo ${name} | tr -d '\r'`
    echo ${name}
  else
    echo "requires an argument"
  fi
}

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

# 獲取設(shè)備ID 參數(shù)1: adb devices 設(shè)備ID index
function getFmtDeviceId(){
  if [ -n "$1" ]; then
    line=$1
    let "line++" #跳過(guò)1行
    deviceId="`adb devices | sed -n "${line}p" | awk '{printf $1"\n"}' `"
    # 去除某些設(shè)備后面攜帶回車(chē)符
    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
      # 單設(shè)備
      name=`getFmtDeviceName 1`
      echo "install apk to devices: ${name}"
      adb install -r $1
    elif [ $count -gt $one_dev ] 
    then 
      # 多設(shè)備
      if [ -n "$2" ]; then
        # 帶設(shè)備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
      # 單設(shè)備
      name=`getFmtDeviceName 1`
      echo "uninstall apk on $name"
      adb uninstall $1
    elif [ $count -gt $one_dev ] 
    then 
      # 多設(shè)備
      if [ -n "$2" ]; then
        # 帶設(shè)備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
}

# 進(jìn)入adb shell 環(huán)境
function as(){
  count=`getAdbDevicesCount`
  one_dev=1
  if [ $count -eq $one_dev ]
  then
    # 單設(shè)備
    name=`getFmtDeviceName 1`
    echo "${name} Last login: `date`"
    adb shell
  elif [ $count -gt $one_dev ] 
  then 
    # 多設(shè)備
    if [ -n "$1" ]; then
      # 帶設(shè)備index
      index=$1
      deviceId=`getFmtDeviceId ${index}`
      name=`getFmtDeviceName ${index}`
      echo "${name} Last login: `date`"
      adb -s $deviceId shell
    else
      # 不帶設(shè)備index
      echo "enter shell which devices?"
      listFmtDevices
      read -p "Enter: " index
      as $index
    fi
  else
    echo "no devices"
  fi
}

# 截圖
# adb exec-out screencap -p > screen.png
alias scap="adb exec-out screencap -p >"

function fcap(){
  # savepath=$(cd `dirname $0`; pwd)
  count=`getAdbDevicesCount`
  one_dev=1
  if [ $count -eq $one_dev ]
  then
    # 單設(shè)備
    name=`getFmtDeviceName 1`
    echo "${name} Last login: `date`"
    while true; 
    do
      
      DATE=`date +%Y%m%d%H%M%S`
      scap screen_${DATE}.png 
      echo "save screen_${DATE}.png success!"
      read -p 'Press any key to continue screencap ...'
    done
  elif [ $count -gt $one_dev ] 
  then 
    # 多設(shè)備
    if [ -n "$1" ]; then
      # 帶設(shè)備index
      index=$1
      deviceId=`getFmtDeviceId ${index}`
      name=`getFmtDeviceName ${index}`
      echo "${name} Last login: `date`"
      while true; 
      do
        
        DATE=`date +%Y%m%d%H%M%S`
        adb -s $deviceId exec-out screencap -p > screen_${DATE}.png 
        echo "save screen_${DATE}.png success!"
        read -p 'Press any key to continue screencap ...'
      done
    else
      # 不帶設(shè)備index
      echo "enter shell which devices?"
      listFmtDevices
      read -p "Enter: " index
      fcap $index
    fi
  else
    echo "no devices"
  fi

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脱盲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子日缨,更是在濱河造成了極大的恐慌钱反,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匣距,死亡現(xiàn)場(chǎng)離奇詭異面哥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)毅待,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)幢竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人恩静,你說(shuō)我怎么就攤上這事焕毫。” “怎么了驶乾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵邑飒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我级乐,道長(zhǎng)疙咸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任风科,我火速辦了婚禮撒轮,結(jié)果婚禮上乞旦,老公的妹妹穿的比我還像新娘。我一直安慰自己题山,他們只是感情好兰粉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著顶瞳,像睡著了一般玖姑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慨菱,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天焰络,我揣著相機(jī)與錄音,去河邊找鬼符喝。 笑死闪彼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的协饲。 我是一名探鬼主播畏腕,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼囱稽!你這毒婦竟也來(lái)了郊尝?” 一聲冷哼從身側(cè)響起二跋,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤战惊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后扎即,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吞获,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谚鄙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了各拷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闷营,死狀恐怖烤黍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傻盟,我是刑警寧澤速蕊,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站娘赴,受9級(jí)特大地震影響规哲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诽表,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一唉锌、第九天 我趴在偏房一處隱蔽的房頂上張望隅肥。 院中可真熱鬧,春花似錦袄简、人聲如沸腥放。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捉片。三九已至,卻和暖如春汞舱,著一層夾襖步出監(jiān)牢的瞬間伍纫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工昂芜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莹规,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓泌神,卻偏偏與公主長(zhǎng)得像良漱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欢际,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容