Android - как вставить содержимое File.txt в оболочку adb

Я пишу небольшой код для поиска номера в WhatsApp и отправить текстовое сообщение.

Я могу отправить текстовое сообщение, если наберу сам скрипт, но я хотел вставить сообщение из файла.

Есть ли способ скопировать содержимое из файла вместо ОС с помощью команды ввода текста оболочки adb.

Мой код ниже.

adb shell input keyevent 82

adb shell am force-stop com.whatsapp

adb shell am start -n com.whatsapp/.Main

adb shell input text "9800000000"

adb shell input keyevent 66

adb shell input text 'This%sis%sa%stest%smessage'

adb shell input keyevent 66

adb shell input text 'I%sam%schecking%slots%sof%sthings'

adb shell input keyevent 61

adb shell input keyevent 61

adb shell input keyevent 66

adb shell am force-stop com.whatsapp

Спасибо,

Дипак

2 ответа

Вы не говорите, какой язык сценариев вы используете. Вы можете сделать это из родного двоичного кода (написанного на C / C++).

 1. Откройте файл для чтения.
 2. ПЕТЛЯ
 3. Прочитайте строку в строку.
 4. преобразовать все специальные символы в escape-строки
 5. Используйте систему команд, чтобы отправить текст:
     система ("входной" текст Hello%sWorld");
 6. ПЕТЛЯ

Я написал такой бинарный файл, который называется inputer. вставка в него работает довольно хорошо, но каждая строка является fork/exec, так что большие файлы могут выйти из строя, вам нужно проверить каждую завершающую строку или отправить как один огромный вызов.

Да, вы действительно можете это сделать. Это выглядит неопрятно, когда вы проверяете буфер обмена, но работает просто отлично.

Во-первых, вы можете проверить текущее содержимое буфера обмена с помощью буфера обмена вызовов сервисов 1 из оболочки adb (или, без обстрела в первую очередь, буфер обмена вызовов сервисов adb shell 1). После перезагрузки он может начинаться с нуля, например:

буфер обмена служебного вызова 1

Result: Parcel(
  0x00000000: 00000000 00000001 00000000 00000000 '................'
  0x00000010: 00000000 00000000                   '........        ')
#

Вы можете поместить текст в буфер обмена, используя буфер обмена служебного вызова 2, который в основном принимает 3 параметра - два целых числа и строку, которую вы хотите поместить в буфер обмена:

# service call clipboard 2 i32 1 i32 0 s16 "Hi there"
Result: Parcel(00000000    '....')

Если честно, я не уверен, каковы первые два параметра. Один из ответов на переполнение стека предполагает, что первым int является "количество элементов в посылке" (в данном случае один), а вторым - длина строки. Тем не менее, я использовал 0 для второго параметра, и он отлично работает, и я не могу найти документацию, которая соответствует этой конкретной функции... так что возьмите это за то, что оно того стоит.

В любом случае, это в основном создание объекта Parcel с 3 полями, а затем передача его в буфер обмена. Затем буфер обмена распаковывает Parcel и устанавливает значение строки, переданное как содержимое буфера обмена. Вы можете увидеть это, когда перейдете к получению значения впоследствии:

# service call clipboard 1
Result: Parcel(
  0x00000000: 00000000 00000001 00000000 00000008 '................'
  0x00000010: 00690048 00740020 00650068 00650072 'H.i. .t.h.e.r.e.'
  0x00000020: 00000000 00000000                   '........        ')
#

Точно так же, если вы долго нажмете на поле ввода текста и нажмете "Вставить" после этого, вы получите текст, который был установлен через буфер обмена службы вызовов на 2 строки выше (и он будет выглядеть совершенно нормально).

(Приведенные выше примеры взяты из моего HTC EVO под управлением CyanogenMod 7)

Ссылка: https://android.stackexchange.com/questions/19710/is-it-possible-to-write-to-a-devices-clipboard-using-adb

Другие вопросы по тегам