MAGAZINE

ルーターマガジン

インフラ/運用

ネイティブアプリスクレイピングのためのAndroid端末管理方法 ~壁紙変更~

2023.09.13
Pocket

はじめに

弊社ではスマホアプリ上のデータを機械的に収集するネイティブアプリスクレイピングの技術を用いてアドクロールなどの様々なサービスに活用しています。

そのため、社内で大量のスマートフォンを保有し、それぞれの端末からデータ収集を行なっております。しかし数が多いため端末の管理が難しく今までは端末に付箋を貼るなどの対応を行なっておりました。そこで、それぞれの端末の壁紙に端末管理番号を表示することで特定の端末を見つけやすくなるように改善を行いました。

今回はAndroid端末の壁紙変更の際に使用した自動壁紙変更スクリプトをご紹介します。

使用したスクリプト

以下が実際に作成・使用したスクリプトになります。

#!/bin/bash
cd "$(dirname "$0")" || exit

### usage
### bash set_wallpaper.sh ${DEVICE_IP 4th octet} ${DEVICE_ID}

move_focus() {
  for (( i = 0; i < $1; i++ )); do
    adb -s "$DEVICE_IP" shell input keyevent KEYCODE_TAB
  done
  sleep 1
}

DEVICE_IP="192.168.0.$1"
DEVICE_ID="$2"
FILENAME="$DEVICE_ID"_wallpaper.png

# adbd再起動・TCP/IPでadb接続
sshpass -p admin! ssh -o StrictHostKeyChecking=no root@"$DEVICE_IP" "setprop service.adb.tcp.port 5555; stop adbd; start adbd;"
adb connect "$DEVICE_IP"
sleep 3

# スクリーンサイズ取得
screen_size=$(adb -s "$DEVICE_IP" shell wm size | grep -o '[0-9]*x[0-9]*')
# 壁紙作成
convert -background white -size "$screen_size" -fill "#000000" -pointsize 120 -gravity center label:"$DEVICE_ID\n$DEVICE_IP" "$FILENAME"

# 壁紙を端末内に移動
file_path="/sdcard/Download/$FILENAME"
adb -s "$DEVICE_IP" push "$FILENAME" "$file_path"
rm "$FILENAME"

# 壁紙設定
adb -s "$DEVICE_IP" shell am start \
  -a android.intent.action.ATTACH_DATA \
  -n com.google.android.apps.wallpaper/com.android.wallpaper.picker.StandalonePreviewActivity \
  -d "file://$file_path" \
  -t 'image/*' \
  -e mimeType 'image/*'

sleep 5

move_focus 8
adb -s "$DEVICE_IP" shell input keyevent KEYCODE_ENTER
move_focus 2

adb -s "$DEVICE_IP" shell input keyevent KEYCODE_ENTER

スクリプトのポイント

以下のコマンドで端末のスクリーンサイズを動的に取得することにより異なるモデル、サイズの端末でも同じように実行可能となります。

adb -s "$DEVICE_IP" shell wm size | grep -o '[0-9]*x[0-9]*'

ImageMagick のパッケージに含まれる convert コマンドを使用して必要な情報を記載した壁紙画像を作成します。 今回は社内で利用している端末IDと端末ごとに固定しているローカルIPを記載した壁紙を作成しています。

convert -background white -size "$screen_size" -fill "#000000" -pointsize 120 -gravity center label:"$DEVICE_ID\n$DEVICE_IP" "$FILENAME"

実行結果

おわりに

以上、Android端末の壁紙を動的に作成・変更するスクリプトの紹介でした。adbコマンドを利用することでAndroid端末の様々な操作を自動化することが可能になるので興味のある方はぜひ調べてみてください。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから