理想情况下,这个问题的答案应该是无根的。
我正在考虑重写 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 访问权限。
- 转到 $NDK_ROOT(解压后 NDK zip 的最顶层文件夹)。
- 将 $NDK_ROOT/samples/hello-jni 目录复制为
$NDK_ROOT/sources/hello-world.
- 转到 $NDK_ROOT/sources/hello-world。
- 编辑 AndroidManifest.xml 为应用程序指定适当的名称
(这是可选的)。
- 转到 $NDK_ROOT/sources/hello-world/jni。这就是来源的地方
代码是。
- 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;
}
- 编辑 Android.mk 并更改行 include $(BUILD_SHARED_LIBRARY)
包括 $(BUILD_EXECUTABLE)。您还可以更改 LOCAL_MODULE
行到您想要的可执行文件的名称(默认为 hello-jni)
- 返回$NDK_ROOT/sources/hello-world
- 运行 ../../ndk-build 以创建可执行文件。
- 将其从 $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 完成的。)
- 执行完整路径为 /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(使用前将#替换为@)