在Android模拟器上粘贴文本


316

有没有简便的方法可以将(剪贴板上的)剪贴板内容复制/粘贴到EditViewAndroid Emulator上?

(只是为了简化开发/测试)


2
乔尔·贝克汉姆(Joel Beckham)发送短信: >我通常将要复制的文本作为短信发送>通过telnet,然后从短信中复制文本。除了使用telnet之外,您还可以使用eclipse在模拟器中模拟传入的短信:在eclipse android工具(版本17可能也位于旧版本中)中,打开DDMS-Perspective。在“仿真器控制” /“电话操作”下,您可以模拟传入的短信>仿真器收到消息后,可以将其复制并粘贴>任意位置。
2012年

2
对于现在正在看这个问题的任何人;现在它已在Android中获得本机支持-只需确保您使用的是此处所述的最新Android Studio /仿真器:stackoverflow.com/a/42678005/207552
bschandramohan

2
长按文本字段,然后选择“粘贴”
onmyway133

Answers:


126

使用v25.3.x的Android Emulator和x86 Google API Emulator系统映像API Level 19(Android 4.4-Kitkat)及更高版本,您可以简单地使用鼠标或键盘从桌面复制和粘贴。

Android Studio 2.3宣布了此功能

使用Android模拟器复制和粘贴


27
截至2018年1月,当前模拟器版本中存在一个已知的错误,该错误有时会停止起作用。解决方法是,单击“ ...”图标,转到“设置”,然后再打开和关闭“启用剪贴板共享”设置。(来源
mhsmith

@mhsmith您如何使用Android命令行工具从命令行或通过编辑~/.android/avd/ .ini文件来进行此操作(重置剪贴板共享)?
Chloe

@Chloe由于此问题与已经运行的模拟器有关,因此我怀疑其中任何一种都会有所作为。
mhsmith

1
如何在Mac上粘贴?按下Cmd会带来多点触控。Cmd-V不执行任何操作。
jcollum

16
@jcollum左键单击并按住要粘贴到的文本字段,然后单击“粘贴”。我想,cmd + v无效,ctrl + v也无效。
利亚姆·道森

306

在终端中,键入 adb shell input text 'my string here. With some characters escaped like \$ that'

请注意,在文本中包含空格的另一种方法是替换%s每个space字符。


22
如果您使用的是Mac,则可以更加轻松地粘贴剪贴板中的内容: adb shell input text "pbpaste"
lowellk

3
最终花费了几个小时,并在python中解决了空间问题。现在无需创建十几个同步帐户就可以更轻松地将小书签终止到股票浏览器。github.com/gcb/AdbPaste(在等待仿真器加载和几次在线游戏会话时编写!... $%#慢速仿真器)
gcb

2
这似乎不适用于某些UTF字符-尝试发送后'ლ\(ಠ益ಠლ\)',它只是说'Killed'或似乎成功,并且没有键入任何内容,模拟器中也没有可粘贴的东西。SMS方法(我从DDMS尝试过)似乎在这里不起作用,它显示为“?(????)” :(
Groxx 2014年

2
我也不能发送带空格的字符串。我必须使用%s。
彼得

2
@Peter和Rose,有没有添加新行的方法?adb shell input text "This%sis%stext\nDoes%snot%work%here."打印“这是文本\ n在这里不起作用。”。
Firelord

84

我通常会通过telnet将要复制的文本作为短信发送,然后从短信中复制文本。就是这样:

通过telnet连接:

  • 句法: telnet localhost <port>
  • 例: telnet localhost 5554

(5554是默认端口。仿真器的标题栏显示了正在使用的端口,因此您可以查看其是否不同)。

发信息:

  • 句法: sms send <senders phone number> <message>
  • 例: sms send 1231231234 This is the message you want to send

(您可以只填写发件人的电话号码)

这对于链接非常有效,因为该消息会自动转换为超链接,您可以单击而无需将其复制/粘贴到浏览器中。

仿真器收到消息后,您可以将其复制并粘贴到任意位置。


3
您甚至不需要telnet ...您可以从ddms发送短信(但是ddms需要telnet)。但好主意:)
蒂玛

@Mur-好主意。谢谢!
乔·贝克汉姆

1
对于感兴趣的任何人,只需创建一个执行此操作的shell脚本即可:gist.github.com/2050770
Todd Mazierski 2012年

7
这个答案太过分了。使用adb。看我的答案。
Rose Perrone

1
是否过度杀毒,但它允许按原样粘贴文本,而无需转义特殊字符。
德米特里2015年

28

只需从任何地方复制,然后单击并按住仿真器电话的编辑文本,然后将其粘贴到您想要的文本位置(就像您按住并粘贴到实际电话上一样),将显示“粘贴”选项,然后显示“粘贴”。


3
谢谢!绝对是我最喜欢的答案。使用当前版本的仿真器,这非常方便。(当前的仿真器在“设置”下的仿真器控件中具有一个设置,允许剪贴板共享。)
albert c braun

这是在Mac上粘贴的方法,因为默认情况下命令键会启动触摸手势。
吉姆(Jim

19

不确定是否有用,但是,如果您需要从桌面浏览器中获取一个较长的URL才能在移动浏览器中打开,则可以使用该URL发送SMS并直接从消息应用中打开。

在此处输入图片说明


您甚至可以复制该文本。我发现这种方式是最简单也是最棘手的一种!
Hirbod Behnam '18

我收到此错误:“无法发送消息,无线电已关闭”(在MacBook上)
Atetc

那绝对有用!直接从模拟器的完全相同的UI,没有telnet,没有参数。URL用例恰好满足了我的需求。一个非常有效的解决方案。
阿尔贝托·德卡罗

11

如果您在Mac上使用Android Studio,则可能需要提供adb可执行文件的完整路径。要找到此路径,请打开:

Android Studio > Tools > Android > SDK Manager

将路径复制到SDK位置。该adb可执行文件将是一个内platform-tools目录。对我来说,这是一条路:

~/Library/Android/sdk/platform-tools/adb

现在,您可以运行以下命令:

~/Library/Android/sdk/platform-tools/adb shell input text 'thetextyouwanttopaste'

7

我已经厌倦了这个问题,所以我只是用这个别名来处理它:

alias ap="pbpaste | xargs adb shell input text"

然后,当您打开新的终端窗口时,键入“ ap”会将剪贴板上的所有内容粘贴到模拟器的活动选择的文本字段中。

设定

只需将其添加到您的个人资料中(对于大多数~/.bash_profile用于zsh用户的用户,对于的用户~/.zshrc),便可以在任何地方使用别名。另外,如果您是bash用户(MacOS的默认用户),则可以在终端中运行以下命令为您设置它:

echo "alias ap='pbpaste | xargs adb shell input text'" >> ~/.bash_profile && source ~/.bash_profile

alias ap="adb shell input text `pbpaste`"
gderaco '17

我正在使用Windows和别名'alias' is not recognized as an internal or external command, operable program or batch file. 该怎么做
shareef

6

仅适用于API级别> = 24

从本地计算机复制任何文本,然后只需运行此命令

adb shell input keyevent 279

确保在“ Android模拟器设置” Enable Clipboard Sharing中启用了这些选项


5

也许有些棘手,但是您可以使用模拟器控件将短信发送给模拟器​​。那么如果文本较长,则不必重新输入所有文本,并且可以将其复制粘贴到模拟器中。

另一种方法:通过“ telnet localhost PORT”连接到仿真器,然后使用硬件事件发送将文本输入事件发送到仿真器(需要为UTF-8)。看这个


5

您也可以在没有解决方法的情况下执行此操作。只需在输入字段中单击并按住一会儿,直到出现粘贴通知,然后单击粘贴。而已!


4

在Linux上,这将直接从剪贴板粘贴文本

adb shell input text "'$(xclip -selection c -o)'"

例如,使用此命令创建全局键盘快捷键也非常有用 Ctrl+Shift+Super+V



2

您看过C2DM吗?chrome2phone和fox2phone可以发送链接和剪贴板文本,并自动将其复制到手机上。另外,尝试使用adb shell。有一个服务命​​令(/ system / bin / service)可以使用服务(服务调用剪贴板...)。getClipboardText,setClipboardText和hasClipboardText的事务代码分别为1、2和3。


1

使用Visual Studio模拟器,这是我的方法。

首先是虚拟SD卡:

  1. 使用仿真器的其他工具(小>>图标),然后转到SD卡标签。
  2. 选择计算机上的文件夹以与虚拟SD卡同步。
  3. 从SD卡中拉出,这将在所选文件夹上创建一个文件夹结构。

设置文本文件以传输文本:

  1. 使用Google Play商店安装您选择的文本编辑器
  2. 在您之前创建的虚拟sd卡目录的下载目录中的计算机上,创建一个包含您的文本的文本文件。

每当我需要将文本发送到剪贴板时。

  1. 编辑上面创建的文本文件。
  2. 转到“其他工具”(小>>图标),然后选择“推送到SD卡”。
  3. 在我安装的文本编辑器中打开文本文件,然后将文本复制到剪贴板。(对话框打开时,按住鼠标,选择全选,然后单击复制图标)

设置完成后,很容易重复。相同的方法将适用于其他仿真器,因为您可能需要使用其他方法将文本文件推送到仿真器。


另外,我使用的文本编辑器会通知我内容已更改,并询问我是否要重新加载它。
亚历山大·希金斯

1

(将评论讨论转换为答案)

Windows上唯一的解决方案:https : //github.com/gcb/AdbPaste

几个小时后就写出来解决了这个问题。我现在回到了100%的Linux,请随时以贡献者或维护者的身份加入它!


谢谢你 其他注意事项:发送多行速度很慢。我有一个3页的LUA脚本要上传,此解决方案从文件源中大约需要20分钟。Google确实需要解决这一需求。我知道一个开放源代码的键盘应用程序具有telnet界面,该界面会快得多,但是切换键盘的输入/输出将是额外的步骤。
RoundSparrow hilltx

1
为了解决我在上一条评论中提到的速度问题:我发现在设备上放置一个小助手应用程序可以从adb broadcast命令获取剪贴板内容的速度要快得多。这将填充剪贴板,而不是像AdbPaste那样直接输入-但我能够增强它来读取文本文件,并且对于我的3页LUA脚本,从adb命令到在Android中使用它仅需1或2秒文本框。该应用程序称为Clipper,
RoundSparrow hilltx

1

写入命令:adb devices(它将列出当前连接的设备)选择要在其中写入文本的文本框。编写命令:adb shell输入文本“ Yourtext”(确保仅连接一个设备以运行此命令)完成!


0

我是来这里寻找相同问题的解决方案的,最终编写了一个Android应用程序来解决此问题。您可以从http://www.box.net/shared/6203bn441bfltkimajmk下载。只需通过“首选项”菜单指定一个URL,即可指向一个可以轻松更改Web响应的位置。Web响应的第一行将为您复制到仿真器的剪贴板中。可以在http://agilesc.barryku.com/?p=255中找到更多详细信息。


1
您不应在此处发布可执行代码。源代码会更好。
lowellk

0

对于Mac和Linux,请在您的aliases_bash文件中尝试使用此功能(对于Mac用户,该文件位于/ etc / aliases_bash中,请确保使用sudo vim / etc / aliases_bash)

function adbtx {
  userinput="$(sed 's/ /%s/g' <<< $1)"
  adb shell input text "${userinput}";
}
export -f adbtx

然后在命令行中输入:

adbtx 'Your text to emulator input'

您的文本到仿真器输入 ”将在仿真器文本字段中输入。

感谢Eliot替换sed的字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.