Android開発者必見！ADB×バッチファイルによる作業の効率化

# はじめに
普段Windowsで自社のAndroidアプリの開発をする際に使っている、ADBコマンドやバッチファイルをまとめてみました！
初めて書く技術ブログのため拙い部分もあるかと思いますが、
ご指摘やコメントをいただけますと幸いです。

# なぜADB×バッチファイルなのか？
Androidアプリを開発したり、テストをする際に
ログインのたびにいちいちメールアドレスやパスワードを入力するのが面倒だったためです。
バッチファイルであれば決まった文章をクリックするだけで入力できます！

# ADBとは？
「Android Debug Bridge」の略で、Android端末とやりとりするための多用途なコマンドです。
アプリのインストールやアンインストール、ファイルの転送、ログの出力などさまざまな操作が行えます。

# バッチファイルとは？
Windowsで複数のコマンドを自動で実行するファイルです。
ファイルをダブルクリックするだけで実行できるため、
開発者以外でも扱いやすくなっています。

# ADBコマンドとバッチファイルの活用例
### よく使うADBコマンド

- **文字列入力（メールアドレスやパスワードなど）**
```bat
adb shell input text <入力したい文字列>
```

- **画面の明るさを調整**
明るさの部分に1~100を指定することで、細かく調整ができます。
```bat
adb shell settings put system screen_brightness <明るさ>
```

- **バッテリー残量確認**
0~100の割合でバッテリー残量を確認できます。
他にもバッテリー総量、電圧、温度、ステータスなどを確認することもできます。
```bat
adb Shell dumpsys battery
```

- **パッケージ名の一覧を取得**
`sort` を使うことでアルファベット順でパッケージ名を並び替えています。
```bat
adb shell pm list packages | sort
```

- **システムアプリの無効化**
システムアプリやプリインストールされたアプリを無効化することができます。
パッケージ名に通常のアプリを指定すればアンインストールも可能です。
```bat
adb shell pm uninstall -k –user 0 <パッケージ名>
```

- **システムアプリの有効化**
無効化したシステムアプリを有効化することが可能です。
```bat
adb shell cmd package install-existing <パッケージ名>
```

- **デバイスオーナー権限付与**
デバイスオーナー権限については以下の記事で詳しく解説されています。
https://qiita.com/LyricalMaestro0/items/438cc3d3cd8d42eb0b8f
https://qiita.com/bina1204/items/eb6cb133bc833dc886f7
```bat
adb shell dpm set-device-owner <パッケージ名/デバイスアドミン>
```

- **デバイスオーナー権限の解除**
Debug版のみ動作します。Release版では動作しません。
```bat
adb shell dpm remove-active-admin <パッケージ名/デバイスアドミン>
```

### バッチファイルでの応用

- **画面キャプチャ**
バッチファイルにすることで、素早く画面キャプチャを撮影することが可能です。
```bat:screen_capture.bat
@echo off
SETLOCAL EnableExtensions

:: ファイル名の生成に使う日付と時間を取得
SET "current_date=%date:~0,4%%date:~5,2%%date:~8,2%"
SET "current_hour=%time:~0,2%"
SET "current_minute=%time:~3,2%"
SET "current_second=%time:~6,2%"

:: 時間が10未満の場合、0でパディングする
if %current_hour% lss 10 (SET "current_hour=0%time:~1,1%")

:: ファイル名の作成
SET "filename=%current_date%-%current_hour%%current_minute%%current_second%.png"

:: 保存先フォルダの設定
SET "folder=C:\Users\%USERNAME%\Desktop\screencap"

:: フォルダが存在しない場合は作成
if not exist "%folder%" mkdir "%folder%"

:: スクリーンキャプチャの取得と保存
adb exec-out screencap -p > "%folder%\%filename%"

:: フォルダを開く
start %folder%

ENDLOCAL
```

- **画面録画**
Flipperを起動せずに素早く画面録画を行えます。

```bat:record_screen.bat
@echo off
setlocal

:: 録画ファイルの一時的な保存場所を定義
set DEVICE_PATH=/sdcard/screenrecord.mp4

:: PC側の保存場所を定義
set PC_PATH=%USERPROFILE%\Downloads\screenrecord.mp4

:: Androidデバイスでの画面録画の開始 (録画時間を10秒に設定しています。必要に応じて変更してください)
adb shell screenrecord --time-limit 10 %DEVICE_PATH%

:: 録画ファイルをPCに転送
adb pull %DEVICE_PATH% %PC_PATH%

:: Androidデバイス内の一時的な録画ファイルを削除
adb shell rm %DEVICE_PATH%

endlocal
pause
```

- **画面のオートタップ**
主にテストにて使用しています。
`<x y>` の部分にタップさせたい座標を指定することで
任意の間隔と回数でテストが可能です。
例: 端末のバッテリー消費量のテストなど

```bat:auto_tap_script.bat
@echo off

:// 端末のシリアル番号を入力（adb devicesで取得した番号）
set /p serial="Enter device serial number: "

:// 実行回数を入力
set /p count="Enter tap count: "

:// タップ間隔（秒）を入力
set /p interval="Enter tap interval in seconds: "

:// 入力されなかった場合のデフォルト値
if "%serial%"=="" (
    echo Serial number is not specified.
    exit /b
)

if "%count%"=="" (
    set count=1000
    echo Defaulting tap count to 1000
)

if "%interval%"=="" (
    set interval=2
    echo Defaulting tap interval to 2 seconds
)

set i=0

echo Device serial: %serial%
echo Count: %count%
echo Interval: %interval% seconds

adb kill-server
adb start-server

adb -s %serial% wait-for-device

:TAP
if %i% geq %count% ( goto END )
adb -s %serial% shell input touchscreen tap <x y>
set /a "i = i + 1"
echo tap count : %i%
powershell Start-Sleep %interval%
goto TAP

:END
echo Operation completed.
exit /b
```

# 参考リンク
- [Android Debug Bridge（adb）  |  Android デベロッパー  |  Android Developers](https://developer.android.com/tools/adb?hl=ja)
- [Device Owner について](https://qiita.com/bina1204/items/eb6cb133bc833dc886f7)
- [DeviceAdmin, ProfileOwner, DeviceOwnerについての初めの一歩](https://qiita.com/LyricalMaestro0/items/438cc3d3cd8d42eb0b8f)