问题描述
设置
我在Android 10
设备上,并拥有一个应用程序(此后为生成器),该应用程序生成可以复制到设备剪贴板(包括划动,点击等)的数据。我需要重复执行尽可能多的次数(数百,数千,无论如何),并以编程方式检索该数据(大概是通过bash
命令周围的perl
或adb
脚本来检索)
问题
实现这一目标的有效方法是什么?
详细说明我的尝试
我实际上有一个解决方案,只是不确定它是否可以做到“最佳”(无论如何)。 发电机是封闭源代码,因此我无法以任何方式改变其行为,但我可以重复
adb shell monkey -p <generator-app> 1
- 模仿产生数据的敲击动作,并将其复制到with种剪贴板中
adb shell input tap x y
命令;
- 将焦点打开/切换到Termux终端模拟器(在Android设备上):
adb shell monkey -p com.termux 1
- 通过在
termux-clipboard-get
终端(同样在Android设备上)中运行termux
命令,通过其Termux:API add-on访问剪贴板。我通过adb
和 进行控制
adb shell input text 'termux-clipboard-get\>\>file-on-android-gadget.txt' && adb shell input keyevent 66
(keyevent 66 means ENTER
,而\>\>
表示附加>>
,并带有转义字符)。
- 重复整个shebang。
这为我提供了file-on-android-gadget.txt
中所需输出的许多实例,这些实例保存在电话本地(我可以稍后再获取,等等)。
替代路线?
困扰我的是需要在两个应用程序之间来回切换。我不知道如何与 generator 进行交互,因为它是封闭源代码,并且不公开其内部结构,但是也许一个人可以在“另一端”做得更好,即检索剪贴板数据时。
较新的Android API have locked down访问剪贴板,这使得通过adb
进行编程交互变得困难。 This SO thread指向a repo的(Kotlin + gradle)应用程序通过可通过adb
运行的服务设置剪贴板,但是我尝试 get 剪贴板不成功(即getPrimaryClip()
返回空)。我相信这是因为,根据the docs:
getPrimaryClip
公共ClipData getPrimaryClip()
返回剪贴板上的当前主剪辑。如果申请 不是默认的IME或没有输入焦点,则返回null。
因此,可能没有办法只能在第二个应用程序上 focus 集中起来,然后才能检索剪贴板。但是我没有编程应用程序的经验,因此是一个问题。
进一步的参考
在学习期间,我发现another repo的Android应用程序(Java + maven)同时获取并设置了剪贴板。不过需要注意的是:从Android 10开始,needs to be的焦点是广播接收者检索剪贴板数据(除此之外,它工作正常;正如我所说的,我将其保存在Android 10设备上)。因此,这不会比我上面详细介绍的当前基于termux的解决方案更好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)