您可以使用 ADB 从计算机直接在 android 设备上输入吗?如果是这样,怎么做?
7 回答
虽然这个问题很老,但我想添加这个答案:
您可以使用adb shell input keyevent KEYCODE
相应的。adb shell input text "mytext"
. 可以在此处找到所有键码的列表
正如 Manuel 所说,您可以使用adb shell input text
,但您需要用 , 替换空格%s
以及处理引号。这是一个简单的 bash 脚本,可以很容易地做到这一点:
#!/bin/bash
text=$(printf '%s%%s' ${@}) # concatenate and replace spaces with %s
text=${text%%%s} # remove the trailing %s
text=${text//\'/\\\'} # escape single quotes
text=${text//\"/\\\"} # escape double quotes
# echo "[$text]" # debugging
adb shell input text "$text"
另存为,说,atext
并使可执行。然后你可以调用不带引号的脚本......
atext Hello world!
...除非您需要发送引号,在这种情况下,您确实需要将它们放在其他类型的引号之间(这是 shell 限制):
atext "I'd" like it '"shaken, not stirred"'
为了避免文本参数的扩展/评估(即对于特殊字符,如'$'或';'),您可以将它们包装成这样的引号:
adb shell "input text 'insert your text here'"
这是一个Bash
基于 - 的解决方案,适用于任意/复杂的字符串(例如随机密码)。在这方面,这里介绍的其他解决方案对我来说都失败了:
#!/usr/bin/env bash
read -r -p "Enter string: " string # prompt user to input string
string="${string// /%s}" # replace spaces in string with '%s'
printf -v string "%q" "${string}" # quote string in a way that allows it to be reused as shell input
adb shell input text "${string}" # input string on device via adb
这让我可以通过笔记本轻松地在 Android 平板电脑上设置所有必要的帐户。
你可以在talkmyphone中看到它是如何完成的。
他们正在使用Jabber
,但它可能对您有用。
使用 zsh 时,这里有一个更强大的函数来向 Android 提供文本:
function adbtext() {
while read -r line; do
adb shell input text ${(q)${line// /%s}}
done
}
虽然 Zsh 引用可能与常规的 POSIX shell 略有不同,但我没有发现任何它不起作用的东西。例如,丹的答案丢失了>
,也需要转义。
我正在使用它pass show ... | adbtext
。
input
不支持 UTF-8 或其他编码,你试试会看到这样的
$ adb shell input text ö
Killed
因此,如果这些是您的意图,您需要更强大的东西。
以下脚本使用带有CulebraTester2-public后端的AndroidViewClient/culebra来避免限制。input
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from com.dtmilano.android.viewclient import ViewClient
vc = ViewClient(*ViewClient.connectToDeviceOrExit(), useuiautomatorhelper=True)
oid = vc.uiAutomatorHelper.ui_device.find_object(clazz='android.widget.EditText').oid
vc.uiAutomatorHelper.ui_object2.set_text(oid, '你好世界 ')
它找到一个EditText
然后输入一些汉字和一个表情符号。
如果只需要输入文本,bash
您可以使用相同的方法来实现。curl
#! /bin/bash
#
# simple-input-text
# - Finds an EditText
# - Enters text
#
# prerequisites:
# - adb finds and lists the device
# - ./culebratester2 start-server
# - jq installed (https://stedolan.github.io/jq/)
#
set -e
set +x
base_url=http://localhost:9987/v2/
do_curl() {
curl -sf -H "accept: application/json" -H "Content-Type: application/json" "$@"
}
oid=$(do_curl -X POST "${base_url}/uiDevice/findObject" \
-d "{'clazz': 'android.widget.EditText'}" | jq .oid)
do_curl -X POST "${base_url}/uiObject2/${oid}/setText" \
-d "{'text': '你好世界 '}"