17

您可以使用 ADB 从计算机直接在 android 设备上输入吗?如果是这样,怎么做?

4

7 回答 7

27

虽然这个问题很老,但我想添加这个答案:

您可以使用adb shell input keyevent KEYCODE相应的。adb shell input text "mytext". 可以在此处找到所有键码的列表

于 2012-04-26T11:40:33.993 回答
6

正如 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"'

在此处输入图像描述

于 2017-10-15T04:01:18.890 回答
5

为了避免文本参数的扩展/评估(即对于特殊字符,如'$'或';'),您可以将它们包装成这样的引号:

adb shell "input text 'insert your text here'"
于 2014-10-22T12:52:53.037 回答
1

这是一个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 平板电脑上设置所有必要的帐户。

于 2022-03-05T10:04:32.850 回答
0

你可以在talkmyphone中看到它是如何完成的。

他们正在使用Jabber,但它可能对您有用。

于 2010-10-20T13:51:20.327 回答
0

使用 zsh 时,这里有一个更强大的函数来向 Android 提供文本:

function adbtext() {
    while read -r line; do
        adb shell input text ${(q)${line// /%s}}
    done
}

虽然 Zsh 引用可能与常规的 POSIX shell 略有不同,但我没有发现任何它不起作用的东西。例如,丹的答案丢失了>,也需要转义。

我正在使用它pass show ... | adbtext

于 2022-01-16T18:38:10.420 回答
0

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': '你好世界 '}"
于 2022-03-06T01:59:24.070 回答