将自定义工具添加到 android adb shell

2023-12-13

理想情况下,这个问题的答案应该是无根的。

我正在考虑重写 adb 工具之一 sendevent.c 我在网上找到了这个文件,并且相信我可以根据我的目的对其进行调整。

我想我可以将我的新文件推送到设备,但我不确定的是我可以放置该文件的目录以便它可以执行,根据我的研究,我找到了一些目录,但在尝试推送时出现权限错误给他们。

还有一个问题与我想做的事情相关。但没有解释如何添加新工具以供参考here.


edit

或者是否有人知道在非 root 设备上复制复杂拖动而不牺牲准确性的方法?

我最初的想法是删除所有其他有效但不那么准确的协调事件,并且时间需要进行微调。


编译笔记

对于任何其他对如何执行此操作感兴趣的人。

我刚刚编译并运行了一个 hello world 测试,我找到的说明在此question:

如果链接无效,这里是答案的副本(我的测试修改了 test-libstdc++ 示例,因为它更轻量级):

最后在 Linux 上使用 NDK r8e 进行测试,在 Nexus 4 上使用 Windows 7 上的 SDK Platform-Tools Rev 18 中的 adb 进行测试(最新截至 2013 年 7 月 25 日),无需 root 访问权限。

  1. 转到 $NDK_ROOT(解压后 NDK zip 的最顶层文件夹)。
  2. 将 $NDK_ROOT/samples/hello-jni 目录复制为 $NDK_ROOT/sources/hello-world.
  3. 转到 $NDK_ROOT/sources/hello-world。
  4. 编辑 AndroidManifest.xml 为应用程序指定适当的名称 (这是可选的)。
  5. 转到 $NDK_ROOT/sources/hello-world/jni。这就是来源的地方 代码是。
  6. Edit hello-jni.c, remove all the code, and put in your hello world code. Mine is:

    include

    int main( int argc, char* argv[]) { printf("Hello, World!"); return 0; }
  7. 编辑 Android.mk 并更改行 include $(BUILD_SHARED_LIBRARY) 包括 $(BUILD_EXECUTABLE)。您还可以更改 LOCAL_MODULE 行到您想要的可执行文件的名称(默认为 hello-jni)
  8. 返回$NDK_ROOT/sources/hello-world
  9. 运行 ../../ndk-build 以创建可执行文件。
  10. 将其从 $NDK_ROOT/sources/hello-jni/libs/armeabi/hello-jni 复制到 Android 设备上的 /data/local/tmp 并更改其权限 至 755(rwxr-xr-x)。如果您更改了 LOCAL_MODULE 行 $NDK_ROOT/sources/hello-world/jni/Android.mk,可执行文件名称 将是 LOCAL_MODULE 的新值而不是 hello-jni。 (全部 这是通过 Android SDK 中的 adb 完成的。)
  11. 执行完整路径为 /data/local/tmp/hello-jni 的二进制文件,或者 无论你将其命名为什么。

您就完成了(可以开始查看 $NDK_ROOT/docs 中的文档,以更好地了解要做什么)。


我在您提到的问题中解决它的方法是使用adb push local_path remote_path我使用的远程目录是/data/local/tmp/不需要 root 权限。 要推送一个东西,你只需要在本地编译它并发送推送它。然后您可以使用以下命令在设备上运行adb shell absolute_path_to_script

回顾一下。如果您想从 android/adb C 源代码创建自定义脚本,您需要:

  • 编译它(假设你得到my_script)
  • 不要忘记将其设为可执行文件chmod a+x my_script
  • 将其推送到设备adb push my_script /data/local/tmp/my_script
  • 从设备运行它adb shell /data/local/tmp/my_script

现在,为了回答您关于拖动的其他问题,我最终制作了自己的自定义 sendevent 脚本,该脚本获取本地文件(来自 Android 设备),逐行读取事件并将它们发送到驱动程序。

这是脚本http://pastebin.com/LWWiNA6U

它需要 3 个参数,

  • the file_input,
  • the file_output- 这是特定于每个设备的,您需要检查并查看需要在哪里写入原始二进制数据来模拟触摸事件。对于我使用的设备:/dev/input/event5(适用于 HTC One M7)和/dev/input/event2(适用于 Galaxy Note 8)
  • and the sleep_time- 每个触摸事件发送到驱动程序之间的延迟

希望能帮助到你

编辑:哦,顺便说一句,这是示例输入。它的标准转换自getevent就目前我所记得的

0003 0039 4a
0003 0035 1cc
0003 0036 3a2
0000 0000 00000000

0003 0035 250
0003 0036 426
0000 0000 00000000

0003 0035 250
0003 0036 4aa
0000 0000 00000000

0003 0035 149
0003 0036 3a2
0000 0000 00000000

0003 0035 c5
0003 0036 3a2
0000 0000 00000000

0003 0039 ffffffff
0000 0000 00000000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将自定义工具添加到 android adb shell 的相关文章

随机推荐

  • 如何为整个winform应用程序设置文化

    我想为整个 winform 应用程序设置一种文化 我怎样才能做到这一点 我改变了我的Program cs像这样的文件 using System using System Collections Generic using System Gl
  • 如何在 Maven 中按类别运行 JUnit 测试?

    使用 JUnit 4 8 和新的 Category注释 有没有办法选择类别的子集来与 Maven 的 Surefire 插件一起运行 例如我有 Test public void a Category SlowTests class Test
  • NativeScript:显示 ActivityIndi​​cator 时禁用所有控件

    假设有一个带有用户名 密码文本字段和登录按钮的登录页面 按下按钮时 将向服务器设置请求并显示 ActivityIndi cator 目前 我将 StackLayout 放在所有其他控件之上 以免用户在处理请求时单击它们 但在某些情况下 Te
  • 如何使“ListView.builder”从特定索引开始

    1 问题 有没有办法ListView builder比如说 从第二个 index 1 小部件列表的项目 就我而言 更多信息here and here如果你有兴趣 我正在尝试在顶部添加一些空白ListView这样用户就可以将顶部的卡片滚动到靠
  • 使用 AJAX 将表单数据保存到 PHP

    如何将表单数据保存在文件或本地数据库 可能使用 AJAX 中 通过表单操作将数据发送到外部数据库 我的表单的源代码在这里 http jsbin com ojUjEKa 1 edit 我应该对代码进行哪些更改 如果有 EDIT 正确的 因此
  • 使用 php 查找文本中的所有 url(链接)

    我有这个代码正则表达式 它应该将各种不同的网址转换为某些文本中的链接 preg replace代码是 regex https w w w d w S text preg replace regex a href 1 1 a item 现在它
  • 无法在 PhpStorm 断点处观察变量值

    我在调试 PhpStorm 时遇到一个奇怪的问题 我使用的是 XAMPP PhpStorm Xdebug 我在下面编写代码并设置4个断点
  • MongoDB - mongofiles

    C Programs MongoDB bin gt mongofiles exe list connected to 127 0 0 1 test123 txt 6 test123 txt 22 test123 txt 44 test456
  • 具有移动构造函数和赋值的类的默认复制构造函数和赋值

    假设我有这门课 class Test public Test AFAIK 编译器提供默认的复制构造函数和赋值运算符 它们将其他实例的每个成员分配给当前实例 现在我添加移动构造函数和赋值 class Test public Test Test
  • Weka 中 ARFF 格式的属性过多

    我正在处理维度超过 10 000 的数据集 为了使用Weka 我需要将文本文件转换为ARFF格式 但是由于即使使用稀疏ARFF格式 属性也太多 文件大小太大 是否有与数据类似的方法来避免在 ARFF 文件头中写入如此多的属性标识符 例如 属
  • 使用参数从 Cocoa App 执行 Applescript

    我想知道如何从可可应用程序传递参数执行 applescript 我已经在 stackoverflow 的其他问题中看到了执行不带参数的 applescripts 是多么容易 但是使用 NSAppleScript 类 其中我没有看到任何方法可
  • src 文件夹中的 Toolkit.getImage()

    我试图从包中的 src 文件夹中获取图像 但是没有成功 nekoPics i tk getImage getClass getResource String format resources pracs neko s nekosrc i 有
  • 调用 list.remove(0) 时出现奇怪的 UnsupportedOperationException

    我有这个方法 它接受字符串的可变参数 从中创建一个列表 然后尝试删除列表的第一个元素 public void importFrom String files List
  • 如何在Python中检查一个数字是否有下标?

    我有一个字符串 如下所示 t 这使我的代码失效 int t 出现错误 ValueError invalid literal for int with base 10 如何检测字符串是否是上标而不是实整数 我只想将字符串数字转换为 int 并
  • 应用程序调用了为不同线程编组的接口 - Windows 应用商店应用程序

    所以 首先我已经阅读了大量关于这个特定问题的帖子 但我仍然不明白如何解决它 基本上 我试图与 websocket 进行通信 并将收到的消息存储在绑定到列表视图的可观察集合中 我知道我从套接字正确地得到了响应 但是当它尝试将其添加到可观察集合
  • Firebase Auth 链接提供商 Google 登录问题?

    第一次 在使用 Gmail 和密码注册时 firebase 正确保存了凭据 但下一次 我使用 Firebase Google 身份验证 使用注册时提供的相同 Gmail 进行登录 时 凭据将在 Firebase 帐户中被覆盖 覆盖凭据后 我
  • android 的 eclipse 错误:id 无法解析或不是字段

    我刚刚开始玩android开发 并且已经尝试制作一个按钮 我遇到了一个问题 我在以下代码中给出的错误就在 R id button1 上 它说 id 无法解析或不是一个字段 我是否需要手动引用在布局 xml 文件中创建的每个对象 我发现这确实
  • 在 Spring Boot 应用程序中创建自定义连接池

    我正在编写一个 Spring Boot 应用程序 它与 Snowflake 数据仓库连接并对其执行 SQL 查询 我编写了一个配置类来配置数据源以连接到雪花数据仓库 如下所示 Configuration EnableAutoConfigur
  • 如何让 flutter run -d chrome 使用 https?

    我一直在使用flutter run d chrome启动我的应用程序的网络版本 该应用程序使用 FirebaseAuth 当我尝试使用 Google 登录时 它告诉我它不安全 我认为因为run命令正在为 http 请求而不是 https 设
  • 将自定义工具添加到 android adb shell

    理想情况下 这个问题的答案应该是无根的 我正在考虑重写 adb 工具之一 sendevent c 我在网上找到了这个文件 并且相信我可以根据我的目的对其进行调整 我想我可以将我的新文件推送到设备 但我不确定的是我可以放置该文件的目录以便它可