답변:
예, 실제로이 작업을 수행 할 수 있습니다. 클립 보드를 검사 할 때 형편없는 모양이지만 잘 작동합니다.
먼저 service call clipboard 1
adb 쉘에서 또는 현재 쉘없이 먼저 현재 클립 보드 내용을 검사 할 수 있습니다 adb shell service call clipboard 1
. 예를 들어, 재부팅 후 처음에는 비어있을 수 있습니다.
# service call clipboard 1
Result: Parcel(
0x00000000: 00000000 00000001 00000000 00000000 '................'
0x00000010: 00000000 00000000 '........ ')
#
를 사용하여 텍스트를 클립 보드에 넣을 수 있습니다. service call clipboard 2
기본적으로 2 개의 정수와 클립 보드에 넣을 문자열 인 3 개의 매개 변수를 사용합니다.
# service call clipboard 2 i32 1 i32 0 s16 "Hi there"
Result: Parcel(00000000 '....')
솔직히 말해서 처음 두 매개 변수가 무엇인지 잘 모르겠습니다. 스택 오버플로에 대한 한 답변 은 첫 번째 int는 "소포의 항목 수"(이 경우 하나)이고 두 번째는 문자열의 길이라고 제안했습니다. 그러나 두 번째 매개 변수에 0을 사용했는데 정상적으로 작동 하며이 특정 기능과 일치하는 문서를 찾을 수 없으므로 가치가있는 것으로 가져 가십시오.
어쨌든 기본적으로 3 개의 필드가있는 Parcel 객체를 만든 다음 클립 보드에 전달합니다. 클립 보드는 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 '........ ')
#
마찬가지로 텍스트 입력 필드를 길게 누르고이 작업을 수행 한 후 "붙여 넣기"를 누르면 call service clipboard 2
위 의 줄을 통해 설정된 텍스트가 표시됩니다 (완전히 정상적으로 보입니다).
(위의 예는 CyanogenMod 7을 실행하는 HTC EVO에서 나왔습니다)
'........U.n.k.n.' 'o.w.n. .p.a.c.k.' 'a.g.e. ..... ')
때 얻을call service clipboard 2
나는이 방법론을 사용했고 4.x에서는 잘 작동했지만 롤리팝에서는 실패했습니다. 대체 솔루션을 찾고있는 동안 나는 이것을 발견했다 : https : //.com/questions/3391160/paste-text-on-android-emulator
정확히 원하는대로는 아니지만 텍스트를 클립 보드에 복사하려는 대부분의 시간은 암호 필드에 붙여 넣기를 원하기 때문입니다.
추가 보너스로 여기 내 스크립트가 있습니다 ( 텍스트에 공백을 허용하도록 2015-04-24 수정 ).
#!/bin/bash
if [[ "$1" != "" ]]
then
TEXT=$1
else
read -s -p "Enter text you want to insert: " TEXT
fi
ESCAPED_TEXT=`echo $TEXT | sed "s/\s/\%s/g"`
adb shell input text "$ESCAPED_TEXT"
echo "$TEXT" | adb shell xargs -0 input text
것입니다. \ 0 (NUL) 문자를 제외한 모든 텍스트를 처리해야합니다. 불행히도, 이전 adb 버전은 stdin을 adb 명령 줄에 지정된 명령으로 전달하지 않습니다. 이것은 최신 adb 버전에서 수정되었지만 작동하려면 Android N이 필요합니다 .
input
사용되는 쉘이 아닌 Android 장치 의 명령에 필요합니다 adb shell
. 또한 이 답변 에 따라 SDK 버전 22 이하 (롤리팝 이하, 필자가 믿는 것)에만 필요합니다 .
위의 galet에 의해 개선 된 스크립트 버전이 있습니다. 이 스크립트와 마찬가지로 클립 보드에는 쓰지 않지만 현재 포커스가있는 입력 필드로 입력을 보냅니다.
이 스크립트는 Android 셸과 혼동되지 않도록 특수 문자를 이스케이프하도록 개선되었습니다. 이를 통해 문자열을 변경하지 않고 보낼 수 있습니다. read
명령이 (후행) 백 슬래시를 해석 하지 못하도록하기 위해 -r을 추가했습니다.
다음 특수 문자 목록을 사용하여 테스트했습니다.
./adb-send-string ' \`~!@#$%^&*()-_=+[{]}|;:",<.>/?'\'
스크립트는 다음과 같습니다.
#!/bin/bash
# Send text to android device using adb, emulating keyboard input.
# Based on a script from https://android.stackexchange.com/a/105881/223695
# extended to support special characters
if [[ "$1" != "" ]]
then
TEXT="$1"
else
read -s -r -p "Enter text you want to insert: " TEXT
fi
escape() {
# Encapsulate the string in $'', which enables interpretation of
# \xnn escapes in the string. This is not POSIX-sh, but an extension
# documented by bash and also supported by the Android sh.
echo -n "$'"
# Process each character in $1 one by one
for (( i=0 ; i<${#1}; i++ )); do
# Extract the i'th character
C="${1:$i:1}"
if [ "$C" = ' ' ]; then
# Encode spaces as %s, which is needed for Android's
# "input text" command below 6.0 Marshmellow
# See https://stackoverflow.com/documentation/android/9408/adb-shell/3958/send-text-key-pressed-and-touch-events-to-android-device-via-adb
echo -n '%s'
else
# Encode everything else as \xnn, to prevent them from being
# interpreted by the Android shell
printf '\\x%02x' "'$C"
fi
done
# Terminate the $''
echo -n "'"
}
ESCAPED_TEXT=`escape "$TEXT"`
adb shell input text "$ESCAPED_TEXT"
나는 조금 시도하고 googled했고 call-service-clipboard-approach가 최신 안드로이드에서 작동을 멈추는 것처럼 보였으며 4.4.4 버전 Android에서는 실패했습니다. 즉, adb-shell에서 클립 보드 액세스 (읽기 및 쓰기)를 받으려면 앱이 필요합니다. github의 majido에서 클리퍼를 사용 합니다. APK도 호스팅되므로 직접 컴파일 할 필요가 없습니다. 설치되면 브로드 캐스트 명령을 사용하여 통신 할 수 있습니다 (앱에서 정확한 명령을 알려줍니다). 응용 프로그램은 루트가 필요하지 않습니다.
adb shell input
문자를 보내는 데 사용 되는 다른 스크립트는 여기에서 찾을 수 있습니다. https://github.com/gcb/AdbPaste
이것은 github에서 복제하거나 직접 다운로드하여 실행할 수있는 Python 스크립트입니다.
$ wget https://github.com/gcb/AdbPaste/raw/master/AdbPaste.py
$ chmod a+x AdbPaste.py
$ ./AdbPaste.py "some text to paste"