将自定义工具添加到 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 的相关文章

  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • Camera.open()返回NULL Android开发

    我正在按照构建相机应用程序的教程进行操作http developer android com tools device html http developer android com tools device html我对 Camera o
  • Android 服务是否有办法检测设备何时锁定?

    我有一个 Android 服务 我希望在设备锁定时执行操作 我想澄清一下 我对屏幕开 关状态不感兴趣 我知道如何使用带有 Intent ACTION USER PRESENT 和 KeyguardManager inKeyguardRest
  • Android onChange 事件未在 android 5 (Lollipop) 上的 chrome 历史记录的 contentObserver 中触发

    我注意到我的 chrome 历史记录和书签的 contentObservers 在 android lolipop 上不再触发 该代码在旧版本的 android 上完美运行 无论 chrome 版本如何 但在 Lollipop 上它不再运行
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • Android Studio:未找到 Gradle DSL 方法:“classpath()”

    首先 我已阅读所有其他解决方案帖子以及有关迁移到 1 0 的官方文档 到目前为止 还没有任何效果 Error Error 23 0 Gradle DSL method not found classpath Possible causes
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • Android studio - 如何查找哪个库正在使用危险权限?

    我正在尝试将 apk 上传到 google play 商店 但令我惊讶的是 我正在使用以下权限 Your APK is using permissions that require a privacy policy android perm
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组

随机推荐

  • 如何为整个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 我在网上找到了这个文件 并且相信我可以根据我的目的对其进行调整 我想我可以将我的新文件推送到设备 但我不确定的是我可以放置该文件的目录以便它可