adb + android:在Linux终端中以编程方式访问应用程序生成的剪贴板数据

问题描述

设置

我在Android 10设备上,并拥有一个应用程序(此后为生成),该应用程序生成可以复制到设备剪贴板(包括划动,点击等)的数据。我需要重复执行尽可能多的次数(数百,数千,无论如何),并以编程方式检索该数据(大概是通过bash命令周围的perladb脚本来检索)

问题

实现这一目标的有效方法是什么?

详细说明我的尝试

我实际上有一个解决方案,只是不确定它是否可以做到“最佳”(无论如何)。 发电机是封闭源代码,因此我无法以任何方式改变行为,但我可以重复

  1. 启动生成和/或将焦点切换到with
adb shell monkey -p <generator-app> 1
  1. 模仿产生数据的敲击动作,并将其复制到with种剪贴板中
adb shell input tap x y

命令;

  1. 将焦点打开/切换到Termux终端模拟器(在Android设备上):
adb shell monkey -p com.termux 1
  1. 通过在termux-clipboard-get终端(同样在Android设备上)中运行termux命令,通过其Termux:API add-on访问剪贴板。我通过adb
  2. 进行控制
adb shell input text 'termux-clipboard-get\>\>file-on-android-gadget.txt' && adb shell input keyevent 66

(keyevent 66 means ENTER,而\>\>表示附加>>,并带有转义字符)。

  1. 重复整个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 (将#修改为@)