PCからAndroidを操作してSNSに投稿するとき、日本語が打てない問題をADBKeyBoardで解決した
PCからAndroidを操作してSNSに投稿するとき、日本語が打てない問題をADBKeyBoardで解決した
USBでつないだAndroid端末を、PCのClaude Codeからadbで操作してTikTokに動画を投稿しようとした。動画の選択までは進んだが、説明文の欄で止まった。adbの input text では日本語を打てないからだ。
解決策は、ADBKeyBoardという開発者向けのキーボードアプリを入れること。これを入れると、PCから送った日本語がそのまま入力欄に入る。ただし、OPPOの端末(ColorOS)では設定の壁が2つあった。
結論を先に書く。
- 日本語を送るには、ADBKeyBoardをキーボードとして有効にし、
ADB_INPUT_B64のブロードキャストで文字列を送る - ColorOSでは「USB経由のインストールの検証」と「認可の監視」の2つを外さないと、インストールとキーボードの切り替えができない
- ADBKeyBoardに切り替えている間は画面キーボードが出ないので、ふだんはGboardにしておき、文字を送るときだけ切り替える
なぜ input text では日本語が打てないのか
adb shell input text は、文字列をキー入力のイベントに変換して端末に送る。キーボードのキーに対応しない文字は変換できないので、日本語は送れない。英数字と記号だけなら送れるので、ハッシュタグの #Excel #ExcelTips はこれで入った。空白は %s と書く。
adb shell input text '#Excel%s#ExcelTips'
日本語を入れるには、キー入力を経由せずに、文字列を入力欄へ直接渡す手段が要る。ADBKeyBoardはそのためのアプリで、キーボード(IME)として動き、adbから受け取った文字列を入力欄に書き込む。
手順
検証した環境は次のとおり。
| 項目 | 内容 |
|---|---|
| PC | Windows 11(Git Bash) |
| 端末 | OPPO(ColorOS 7.1 / Android 10) |
| 入力先 | TikTokアプリの投稿画面の説明欄 |
1. adbを用意する
Windowsにadbが入っていなければ、scoopで入れる。
scoop install adb
adb devices -l # 端末が device と表示されればよい
端末側では、開発者向けオプションで「USBデバッグ」をオンにしておく。
2. ADBKeyBoardのAPKを取得する
ADBKeyBoardはGitHubで公開されているオープンソースのアプリで、APKはリポジトリの直下に置かれている。
curl -sL -o "$TEMP/ADBKeyboard.apk" https://raw.githubusercontent.com/senzhk/ADBKeyBoard/master/ADBKeyboard.apk
3. インストールする(ColorOSでは検証で止まる)
そのままインストールすると、ColorOSでは次のエラーで失敗した。
adb.exe: failed to install ...ADBKeyboard.apk: Failure [INSTALL_FAILED_VERIFICATION_FAILURE]
原因は、USB経由でインストールするアプリを端末が検証する設定だ。verifier_verify_adb_installs が 1(有効)になっていた。これを一時的に 0 にしてから入れ直すと、インストールできた。
adb shell settings put global verifier_verify_adb_installs 0
adb install "$(cygpath -w $TEMP/ADBKeyboard.apk)" # → Success
cygpath -w は、Git Bashのパスを adb.exe が読めるWindows形式に直すために付けている。macOSやLinuxでは不要だ。
4. 「認可の監視を無効化する」をオンにする(ColorOS固有)
インストールできても、キーボードを有効にするコマンドが通らなかった。
Security exception: uid 2000 does not have android.permission.WRITE_SECURE_SETTINGS.
ColorOSは、adbからのセキュリティ関連の設定変更を既定で禁止している。これを解くには、端末の「設定 → その他の設定 → 開発者向けオプション」の一番下にある、「認可の監視を無効化する」をオンにする。
この項目は、ネットの情報では「権限の監視を無効にする」「Disable permission monitoring」とも書かれている。今回の端末での表記は「認可の監視を無効化する」だった。名前で探すと見つからないので、一番下までスクロールして探すとよい。
実際の順番は、この項目をオンにしてから手順3の settings put とインストールを実行した。オフのままで settings put が通るかは確かめていない。ColorOSなら、手順3より先にこの項目をオンにしておくと確実だ。
5. ADBKeyBoardをキーボードとして有効にし、切り替える
adb shell ime enable com.android.adbkeyboard/.AdbIME
adb shell ime set com.android.adbkeyboard/.AdbIME
切り替わると、画面の下に「ADB Keyboard {ON}」と表示される。この状態では、端末の画面キーボードは出ない。
6. 日本語を送る
入力欄をタップしてカーソルを置いてから、文字列を送る。日本語をそのまま渡す ADB_INPUT_TEXT もあるが、Windowsのシェルを経由すると文字化けしやすい。UTF-8をBase64にして送る ADB_INPUT_B64 のほうが確実だ。
T='コピーしたら数式が壊れた? 税率のセルは$で固定しよう(F4キー1発)
#Excel #ExcelTips #エクセル #エクセル初心者 #仕事効率化'
adb shell am broadcast -a ADB_CLEAR_TEXT # 入力欄を空にする(追記したいなら省く)
adb shell am broadcast -a ADB_INPUT_B64 --es msg "$(printf '%s' "$T" | base64 | tr -d '\n')"
Broadcast completed: result=0 と出れば送信できている。改行も含めて、説明欄にそのまま入った。
何度も使うなら、関数にしておくと楽だ。
ja() { adb shell am broadcast -a ADB_INPUT_B64 --es msg "$(printf '%s' "$1" | base64 | tr -d '\n')"; }
ja 'こんにちは'
ふだんはGboardにしておき、送るときだけ切り替える
ADBKeyBoardに切り替えている間は、画面キーボードが出ないので端末で文字を打てない。とはいえ、アンインストールする必要はない。両方のキーボードを有効にしたまま、ふだんはGboardにしておき、PCから文字を送るときだけADBKeyBoardへ切り替えればよい。切り替えはどちらもコマンド1行で済む。
# 送る前: ADBKeyBoardへ
adb shell ime set com.android.adbkeyboard/.AdbIME
# 送った後: Gboardへ
adb shell ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
手順3と4で外した設定(インストールの検証と「認可の監視」)は、今回は戻していない。この端末は、Claude Codeに操作させる専用機として持っておくと決めたからだ。ふだん使いのスマホで同じことをするなら、作業後に verifier_verify_adb_installs を 1 に戻し、「認可の監視を無効化する」もオフにしておく。
ADBKeyBoardは、キーボードとして入力内容に触れられる立場のアプリだ。オープンソースで、インストール後に dumpsys package で確かめると、ネット通信(INTERNET)の権限も持っていなかった。
Claude Codeに操作させるときの注意
今回はClaude Codeのauto modeで端末を操作させた。途中で、自動許可判定に次の操作が拒否された。
| 拒否された操作 | 判定の理由 |
|---|---|
| APKの取得とインストール | 外部コードの持ち込み |
| 検証を外す設定変更 | セキュリティを弱める操作 |
| ギャラリーで動画を選ぶタップ | 理由の表示なし |
| 許可ルールを設定ファイルに足す | 自分の権限設定の書き換え |
最初の2つは、該当するコマンドだけを自分でプロンプトに ! 付きで貼り、自分の権限で実行した。
タップが止まる問題は、/permissions で次のルールを許可に足して解決した。Claude Codeが自分で設定ファイルを書き換えることはできないので、ここは人が入れる。
Bash(adb shell input:*)
このルールを足すと、adb shell input によるタップ・スワイプ・文字入力は、判定を通さずに実行される。TikTok以外の操作も確認なしで通るので、操作させる専用の端末で使うのがよい。
ルールを足したあとは、6本の動画を次の流れで通しで投稿できた。
| 作業 | 誰が実行したか |
|---|---|
| 「認可の監視を無効化する」の切り替え | 自分(端末で操作、最初の1回だけ) |
| APKの取得とインストール、検証の解除 | 自分(! 付きで実行、最初の1回だけ) |
Bash(adb shell input:*) の許可 | 自分(/permissions、最初の1回だけ) |
| 動画とカバー画像の転送 | Claude Code |
| 動画の選択、カバー画像の指定 | Claude Code |
| 日本語の説明文の入力 | Claude Code |
| 「投稿」ボタン | Claude Code(公開の前に、投稿してよいと伝えておく) |
カバー画像は、投稿画面の「カバーを編集」の右にある「+」から、ギャラリーの画像を指定できる。ギャラリーで最初に画像を選ぶと写真投稿になってしまうので、動画は「動画」のタブから選ぶ。