LoginSignup
3
2

More than 5 years have passed since last update.

adbコマンドを連続で実行するshellスクリプトの例

Posted at

tl;dr

Androidアプリの動作確認をするとき、AndroidOSのバージョンやデバイス名、特定のアプリがインストールされているかどうかなどの前提条件を、adbコマンドを使って一括で確認できるようにしたい。

というのも主業務がAndroidアプリのテストなんだけど、他のアプリとの連携を確認する項目が多く、特定の/複数のアプリのインストール確認と(認証が通ってない場合は)認証を通す作業で1時間とかかかることがあるので、一部でもEnterキー一発でわかるようにしたかった。

あと最近こういう小さいスクリプトを書くので自分用のメモ

スクリプト中でやること

今回は以下のことをするサンプルコードを記載する。

  • adbを使えるようにパスを通す
  • helpオプションを使えるようにする
  • 接続しているデバイスのAndroidOSバージョンを確認する
  • 接続しているデバイスのデバイス名を確認する
  • パッケージのリストを元にそのアプリがインストールされているかどうか確認する
    • インストールされていない場合はそれを表示する

今回は含めてないけど電話番号とかSIPのステータスとかが取れるともっと便利な気がする

helpオプションはなくてもいいけど、あるとメンバーに展開しやすいので追加した

サンプルコード

checkPreconditionSample.sh
#!/bin/sh

user_name="wifeofvillon"

# パスを通す
export PATH=$PATH:/Users/${user_name}/Library/Android/sdk/platform-tools

# helpオプション
function usage {
    cat <<EOF
$(basename ${0}) is a tool to check preconditions on Android device.
It needs Android Debug Bridge (adb) to work and works with only one device per exec.

Usage:
    $(basename ${0}) [-v] [-h]

Options:
    --help, -h        print this
EOF
}

# インストール状況を確認するパッケージのリスト
APPS=(
  "com.google.android.apps.maps"
  "com.google.android.music"
  "com.google.android.gm"
  "com.google.android.talk"
  "com.google.android.apps.inbox"
)

# AndroidOSバージョンの確認
function checkAndroidVersion {
  echo "start to check AndroidOS version..."
  echo "/========================================/"
  result=`adb shell getprop ro.build.version.release`
  echo $result
  echo "/========================================/"
}

# デバイス名の確認
function checkDeviceName {
  echo "start to check the device name..."
  echo "/========================================/"
  result=`adb shell getprop ro.product.model`
  echo $result
  echo "/========================================/"
}

# アプリのインストール状況の確認
function checkAppVersion {
  echo "start to check version of apps..."
  echo "/========================================/"
  for key in ${!APPS[@]};
  do
    result=`adb shell dumpsys package ${APPS[$key]} | grep versionName`
    if [[ $result = "" ]]; then
      echo "${APPS[$key]} >>>> Not installed"
    else
      echo "${APPS[$key]}"
      echo "$result"
    fi
  done
  echo "/========================================/"
}

case ${1} in

  help|--help|-h)
    usage
  ;;

  *)
    checkAndroidVersion
    checkDeviceName
    checkAppVersion
  ;;
esac

実行結果

実行環境は

  • macOS 10.14.2 / sh-3.2
  • ZenFone 4 Android 8.0.0

helpオプション

$ sh checkPreconditionSample.sh -h
checkPreconditionSample.sh is a tool to check preconditions on Android device.
It needs Android Debug Bridge (adb) to work and works with only one device per exec.

Usage:
    checkPreconditionSample.sh [-h]

Options:
    --help, -h        print this

オプションなし

$ sh checkPreconditionSample.sh
start to check AndroidOS version...
/========================================/
8.0.0
/========================================/
start to check the device name...
/========================================/
ASUS_Z01KD
/========================================/
start to check version of apps...
/========================================/
com.google.android.apps.maps
    versionName=10.9.2
    versionName=9.76.1
com.google.android.music
    versionName=8.17.7736-1.K
    versionName=8.8.6838-1.B
com.google.android.gm
    versionName=9.1.13.232374143.release
    versionName=8.3.25.192150130.release
com.google.android.talk
    versionName=27.0.215462205
com.google.android.apps.inbox >>>> Not installed
/========================================/
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2