Salin teks dari clipboard ke perangkat Android melalui ADB


Hai Pernahkah Anda menemui keinginan untuk menyalin beberapa teks pada perangkat yang terletak di dekatnya? Saya ingin ini sesederhana copy-paste pada emulator - mengetik dengan tangan Anda membosankan dan tidak selalu nyaman.


Dan bagaimana dengan hotkey: klik, dan teks dari papan klip PC mulai mengetik di layar ponsel / tablet Anda - kedengarannya bagus, kan?


Pada artikel ini kita akan berbicara tentang menggunakan adb sebagai alat penyalin teks dan bagaimana ini dapat dilakukan dengan nyaman.


Jika Anda adalah pengguna adb yang berpengalaman, dan Anda memiliki skrip Anda sendiri seperti ini - saya sarankan Anda untuk pergi ke implementasi itu sendiri dan berbagi pemikiran Anda tentang ini di komentar.


Apa dan mengapa


Kami akan membuat skrip kecil yang memungkinkan Anda mengetik konten clipboard dengan cepat di perangkat nyata:



Ini berguna jika:


  • Periksa pekerjaan dengan tautan atau masukkan ip baru untuk mengonfigurasi proxy pada perangkat lagi:

http://example.com:8080/foo 192.168.1.100 

  • Periksa input karakter khusus atau masukkan data tes yang rumit:

 v3rY$ecUrEP@s$w0rD 

  • Baru saja memasukkan garis panjang:

 Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute: 

  • Atau kunci uji:

 BUexKeGHiERJ4YYbd2_Tk8XlDMVEurbKjWOWvrY 

Tentu saja, kemungkinan besar Anda tidak perlu melakukan ini secara teratur. Tetapi dari waktu ke waktu, saya memiliki kasus di mana perlu memasukkan sesuatu yang tidak nyaman secara manual pada perangkat ini.


Pada akhirnya, yang paling sering adalah pengujian data atau pengaturan api, dan meskipun skrip tidak menghemat 5 menit, ia melakukan pekerjaan jauh lebih baik.


Bagaimana?


Ini dapat dilakukan dengan menggunakan ADB (Android Debug Bridge) . Mungkin, semua pengembang dan sebagian besar QA sudah mengenalnya, setidaknya karena kemampuan untuk melihat log di dalam Android Studio atau secara langsung, melalui adb logcat . Jika Anda belum pernah menggunakan adb sebelumnya, contoh instalasi pada macOS dapat dilihat di sini.


Kami tertarik pada perintah adb shell input , yang memungkinkan input, seperti tap atau swipe .


Ini juga memungkinkan Anda untuk mentransfer teks - teks akan mulai dicetak di bidang input, yang sekarang menjadi fokus:


 adb shell input text <text> 

Jika Anda memasukkan spasi, Anda harus menggantinya dengan %s , dan karakter khusus untuk melarikan diri. Kalau tidak, tidak akan ada yang berhasil.


Perlu dipertimbangkan bahwa adb hanya berfungsi dengan alfabet Latin, angka dan karakter khusus dari pelat ASCII, dan input agak terbatas:


  1. Tidak bekerja dengan karakter seperti Β±Β§
  2. Tidak bekerja dengan pembungkus baris (Tetapi Anda dapat, misalnya, secara terpisah menyebabkan pembungkus baris oleh adb lainnya dengan perintah adb shell input keyevent 66 (enter) atau seperti yang dijelaskan di sini )
  3. Tidak bekerja dengan Cyrillic

Ada solusi yang menarik untuk memasukkan karakter tersebut, mungkin akan memungkinkan untuk mengikat clipboard ke sana dan kemudian teks apa pun akan dicetak. Benar, perangkat harus melakukan pra-instal .apk dengan keyboard.


Penting: Dalam formulir yang diuraikan di atas dan di bawah, perintah adb menyiratkan bahwa satu perangkat terhubung. Jika ada beberapa, Anda dapat melakukan hal berikut:


1) Panggil perintah pada perangkat tertentu. -s -S
Anda dapat mengetahui nomor perangkat dengan perintah adb devices . Kemudian gunakan nomor tersebut saat memanggil perintah:


 $ adb devices List of devices attached 023db62er9dd7d2b device $ adb -s 023db62er9dd7d2b shell input text qwe 

2) Panggil perintah pada satu perangkat yang terhubung melalui usb - opsi -d :


 adb -d shell input text qwe 

3) Panggil perintah pada satu-satunya emulator aktif - opsi -e :


 adb -e shell input text qwe 

Rincian lebih lanjut dapat ditemukan di sini .


Jika Anda bekerja dengan beberapa perangkat dan kasing ini untuk Anda, maka perbaiki perintah adb yang sesuai.


Implementasi


Kami akan melihat lebih dekat solusi untuk macOS, tetapi untuk sistem lain juga ada cara:


  • GNU / Linux
  • MacOS
  • Windows

Solusi Linux

Pada suatu waktu, orang-orang dari KODE ( Dima Suzdalev dan Dima Gaiduk ) membuat solusi Linux yang hebat dan membaginya dengan saya.


Ini bekerja melalui buffer X11 (jika Anda memiliki Wayland , baca di bawah) - Anda memilih teks untuk taruhan, dan kemudian klik tombol pintas yang memanggil skrip.


Mudah untuk menambahkan hotkey seperti itu:


1) Masukkan xclip


2) Tambahkan file skrip


 #!/bin/bash adb shell input text `xclip -o` 

3) Tulis jalur ke skrip dalam pengaturan Pintasan untuk keyboard


Terima kasih teman-teman dan hormat yang luar biasa.


Penting: solusi di atas berfungsi untuk X11 (Xorg). Untuk Wayland, solusi ini tidak relevan. Saya masih belum dapat menemukan cara untuk mendapatkan konten dari buffer di Wayland, kalau dilihat dari pencarian saya belum ada kemungkinan seperti itu. Benar kalau tidak benar.


Jika Anda tidak tahu lingkungan seperti apa yang Anda miliki, lihat di sini. Kemungkinan besar, Anda memiliki X11 dan semuanya akan berfungsi.


Solusi untuk macOS

Untuk macOS linux, solusinya tidak cocok, jadi saya mencoba membuat skrip serupa yang akan menyederhanakan panggilan ke adb shell input text <text> .


Saya harus mengatakan segera - bekerja dengan sed tidak jelas bagi saya. Saya mencoba untuk menyatukan dalam satu tim dan sedikit menambah berbagai pengganti reguler, yang akan membantu untuk melarikan diri karakter khusus dengan benar.
Jika Anda mengetahui cara meningkatkan skrip ini, itu akan sangat keren!


Ini terlihat seperti ini:


 source ~/.bash_profile adb shell input text $(pbpaste | sed -e 's/[_<>|&$;()\"]/\\&/g' -e 's/ /\%s/g' -e 's/!+/!/g') 

( source ~/.bash_profile ditambahkan jika adb bekerja di konsol reguler, tetapi melalui Automator (lebih lanjut tentang itu nanti) adb tidak dikenali, untuk ini Anda pertama-tama perlu menarik path ke adb - misalnya, ditulis dalam ~/.bash_profile .)



Bekerja seperti adb shell input text <text> biasa adb shell input text <text> , tetapi


  1. Sumber teks adalah pbpaste - yaitu, clipboard macOS.
  2. sed memproses teks dari clipboard.
  3. Karakter _<>&$;()\" diloloskan: - & -> \&
  4. Spasi diganti dengan karakter khusus: ` -> % s`
  5. Dengan tanda seru, semuanya rumit - jika seseorang akan menjelaskan penggantian seperti itu kepada saya ! di ! membantu tim untuk tidak jatuh - itu akan keren.

Solusi Windows

Sayangnya ( atau tidak ) pada Windows, saya belum mencoba melakukan ini. Opsi paling jelas yang muncul di benak saya adalah mengadaptasi solusi dan menginstal Cygwin . Ini akan memungkinkan Anda untuk memiliki terminal linux yang nyaman, yang tentunya bermanfaat.
Anda akan membutuhkan paket sed dan dependensinya serta paket cygutils-extra (memberikan perintah untuk mendapatkan isi clipboard - getclip untuk mengganti pbpaste )


Hasilnya akan sangat mirip dengan solusi untuk macOS:


 adb shell input text $(getclip | sed -e 's/[_<>|&$;()\"]/\\&/g' -e 's/ /\%s/g' -e 's/!+/!/g') 

Windows 10 juga memiliki kemampuan untuk mengeluarkan terminal Linux. Saya belum mencoba opsi ini, tetapi seharusnya terlihat seperti solusi dengan Cygwin.



Script sedang beraksi


Sederhanakan pekerjaan


Anda dapat menyalin skrip ke konsol setiap kali atau mengetik adb shell input text <something> dengan tangan Anda, tetapi ini sangat tidak nyaman. Lebih mudah membuat alias atau menetapkan hotkey.


Tentang alias untuk konsol

Kesulitannya di sini adalah bahwa di dalam alias itu sendiri Anda masih perlu untuk melepaskan semua $ dan " agar bisa berfungsi. Saya belum melakukan ini, karena hotkey lebih nyaman bagi saya. Benar, saya menggunakan yang ini sebelumnya - alias adp='adb shell input text' yang membantu mengetik satu kata seperti adp example . Jika seseorang membuat alias untuk dirinya sendiri dengan skrip, tulis - lampirkan di sini.


Tentang hotkey yang akan menjalankan skrip

Jika kita berbicara tentang solusi Linux - itu semua tergantung pada distribusinya, tetapi juga tidak sulit.


Solusi Windows di Cygwin adalah cara mudah .


Awalnya, artikel itu untuk penggunaan internal, jadi metode untuk macOS dijelaskan secara lebih rinci, Anda dapat melihatnya di bawah:


Metode untuk macOS:

Ada banyak opsi untuk melakukan hal ini, tetapi Automator diinstal secara default - Anda dapat dengan cepat membuat hotkey menggunakannya.


Pertama, jalankan Automator , pilih Service type dokumen:



Kemudian konfigurasikan layanan:


  • untuk service receives set no input
  • di dalam tab Actions , pilih tindakan Run shell script


Sekarang Anda dapat menetapkan hotkey ke layanan baru:



Itu dia, sekarang menyalin ke perangkat harus bekerja dengan hotkey.


Benar, layanan hotkey hanya akan berfungsi di aplikasi di mana tab Services ada di menu aplikasi:



Tidak ada tab seperti itu di aplikasi Zeplin untuk macOS, jadi itu tidak berfungsi di sana. Mungkin aplikasi lain untuk menggunakan skrip dapat menghindari batasan ini, untuk saat ini, saya telah melalui Automator.


Perlu juga dipertimbangkan bahwa hotkey dapat mencegat Google Chrome yang sama atau aplikasi lain dan melakukan aksinya alih-alih skrip.


Itu semua


Saya harap artikel ini akan bermanfaat dan akan membantu Anda menyederhanakan solusi masalah seperti itu dalam pekerjaan Anda.

Source: https://habr.com/ru/post/id412551/


All Articles