11

ADB シェル入力イベントで説明されている基本的なキー マッピングを知っていると、テキスト入力と特殊キーのエミュレーションがうまく機能します。しかし、Unicode 文字はどうでしょうか? たとえば、ドイツ語の QWERTZ キーボード レイアウトのウムラウトを使用したいとします。

これは私を得る:

$ adb shell input text ö
Killed

だからクラッシュするようで、

adb shell input text \xFC

入力に ​​xFC を出力します。イベントを試してgeteventみましたが、直接マッピングが見つかりませんでした。キーマッピングファイルも調べました/system/usr/keylayout/Qwerty.kl

唯一の可能性はクリップボード経由だと思いますが、質問Pasting text into Android emulator clipboard using adb shellで指摘されて いるように、Android Ice Cream Sandwich以降での使用方法は不明のようです..

4

3 に答える 3

20

ブロードキャスト インテントを受け入れる仮想キーボードを作成したので、ユニコード文字を adb 経由で editText ビューに送信できます。

たとえば adb shell am broadcast -a ADB_INPUT_TEXT --es msg "你好嗎! こんにちは!"

ここに github プロジェクトがあります: https://github.com/senzhk/ADBKeyBoard

この小さなプロジェクトがお役に立てば幸いです。

于 2013-09-10T11:03:19.587 に答える
7

実際、ADBKeyBoard は非常に優れています。エリック・タンに感謝!

快適に使用するための便利な拡張機能:

adb から ADBKeyBoard に切り替えます。

   adb shell ime set com.android.adbkeyboard/.AdbIME   

利用可能なファイル仮想キーボードを確認してください:

ime list -a  

シェルが「!」を受け入れない場合は、上記の例のように二重ではなく、単純な引用符を使用してください。(説明記号)

adb shell am broadcast -a ADB_INPUT_TEXT --es msg 'Accented characters here'

元の仮想キーボードに戻す: (私の場合はスワイプ...)

adb shell ime set com.nuance.swype.dtc/com.nuance.swype.input.IME  

あなたの人生を簡素化するためにwifi経由でadbを使用してください... :)

于 2014-05-05T22:07:49.323 に答える
2

input仮想キーボードを介して単一のキーイベントしか送信できないため、機能しません(意味がわからない場合はソースコードを確認してください)。

残された唯一の方法はInstrumentationを使用することだと思います。アクティビティのテストを作成してから、次のようなことができると思います。

                final Instrumentation instrumentation = getInstrumentation();
                final long downTime = SystemClock.uptimeMillis();
                final long eventTime = SystemClock.uptimeMillis();
                
                final KeyEvent altDown = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_DOWN,
                        KeyEvent.KEYCODE_GRAVE, 1, KeyEvent.META_ALT_LEFT_ON);
                final KeyEvent altUp = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_UP,
                        KeyEvent.KEYCODE_GRAVE, 1, KeyEvent.META_ALT_LEFT_ON);
                
                instrumentation.sendKeySync(altDown);
                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_A);
                instrumentation.sendKeySync(altUp);
                instrumentation.sendKeySync(altDown);
                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_E);
                instrumentation.sendKeySync(altUp);
                instrumentation.sendKeySync(altDown);
                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_I);
                instrumentation.sendKeySync(altUp);
                instrumentation.sendKeySync(altDown);
                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_O);
                instrumentation.sendKeySync(altUp);
                instrumentation.sendKeySync(altDown);
                instrumentation.sendCharacterSync(KeyEvent.KEYCODE_U);
                instrumentation.sendKeySync(altUp);

これにより、変更されたキーが送信されます: àèìòù

2022年更新

https://stackoverflow.com/a/71367206/236465は、 AndroidViewClient/culebraCulebraTester2-publicバックエンドを使用した別のソリューションを示しています。

于 2013-01-11T07:37:52.657 に答える