Tasker で特定のアプリが起動している間 USB デバッグを無効化する

きららファンタジアFate/Grand Order といったスマホゲームの Android 版は、「USB デバッグを ON にしていると遊べない」という仕様があります。解析対策による仕様でしょうが、USB デバッグを有効のままにしておきたい、というユーザーが一定数居るのも事実です。このページでは、自動化アプリである Tasker を用いて、「特定のアプリが起動している間 USB デバッグを無効化する」という仕組みを作ります。

※このページでは、きららファンタジアを例にタスク、プロファイルを作成しています。他のゲーム/アプリに転用する場合、適宜パッケージ名やアプリ名を読み替えてください。

必要なモノ

  • Tasker
  • root化された端末 (Magiskで動作確認済)

作るタスク

USBデバッグの無効化

Custom Setting アクションで USB デバッグを無効化します。Type は Global で、Name が adb_enabled です。値を 0 にします。Use Root にチェックを入れてください。

USBデバッグの有効化

無効化とほぼ同じです。値が 1 になります。

きらファン起動

グローバル変数 %IsRunning の値を 1 にします。そして、先ほど作った「USBデバッグの無効化」タスクを実行します。

きらファンタスクキルチェック

このようにタスクを作ってください。Run Shell の実行するコマンドは、

ps -A | grep パッケージ名
としてください。例えば、きららファンタジアであれば
ps -A | grep com.aniplex.kirarafantasia
です。Use Root にチェックを入れてください。Store Output In に ローカル変数 %checkresult と入力します。Continue Task After Error にチェックを入れてください。
このコマンドを使用することで、そのアプリが起動しているか(=タスクキルされていないかどうか)を調べることができます。Tasker の機能として特定のアプリが起動していたらタスクを実行するというものがありますが、きららファンタジアではバックグラウンドでも常に USB デバッグが有効になっていないかチェックしているらしく、このような回りくどい仕組みを作る必要があります。

if アクションで条件分岐をします。先ほどのローカル変数 %checkresult に値が入っていなかったら(=タスクキルされていたら)グローバル変数 %IsRunning0 にします。

%IsRunning1 であるかどうかチェックするアクションまで goto アクションで飛ぶことで、擬似的にループを行っています。このままだとタスクキルチェックが常時行われてしまうため、Wait アクションで数秒待たせるようにしても良いでしょう。

作るプロファイル

きらファン

起動にタスク「きらファン起動」を指定します。終了にタスク「きらファンタスクキルチェック」を指定します。

Variable Set %IsRunning, 0

%IsRunning の値が 0 になったときにタスク「USBデバッグの有効化」を指定します。

2つのプロファイルを有効化すれば、準備完了です。

注意事項

  • Magisk のトースト通知(Tasker に権限付与云々)がうるさいので、スーパーユーザー使用の通知はオフにすべきです。
  • Tasker がアプリのチェック処理に間に合わない可能性があるので、Tasker の設定の Application Check MiliSeconds を 100 くらいにしておきます。