{"id":31194821,"url":"https://github.com/AFan4724/GyroHook","last_synced_at":"2025-09-20T02:04:57.872Z","repository":{"id":292758641,"uuid":"981832749","full_name":"AFan4724/GyroHook","owner":"AFan4724","description":"一个允许用户修改安卓设备陀螺仪传感器数据的项目。它包含一个安卓应用、一个 Xposed 模块和一个 C++ 命令行工具，它们共同协作以实现对陀螺仪数据的自定义控制。","archived":false,"fork":false,"pushed_at":"2025-05-12T01:17:38.000Z","size":112,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-12T02:27:46.893Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AFan4724.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-12T00:55:36.000Z","updated_at":"2025-05-12T02:21:59.000Z","dependencies_parsed_at":"2025-05-12T02:27:51.111Z","dependency_job_id":"06b7a281-029f-4ffd-a325-dcf91e21e0b8","html_url":"https://github.com/AFan4724/GyroHook","commit_stats":null,"previous_names":["afan4724/gyrohook"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/AFan4724/GyroHook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AFan4724%2FGyroHook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AFan4724%2FGyroHook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AFan4724%2FGyroHook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AFan4724%2FGyroHook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AFan4724","download_url":"https://codeload.github.com/AFan4724/GyroHook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AFan4724%2FGyroHook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276033070,"owners_count":25573474,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-20T02:02:25.820Z","updated_at":"2025-09-20T02:04:57.854Z","avatar_url":"https://github.com/AFan4724.png","language":"Kotlin","funding_links":[],"categories":["🎮 Hardware and Sensors"],"sub_categories":["Control device Sensors"],"readme":"# GyroHook 项目\n\n## 简介\n\nGyroHook 是一个允许用户修改安卓设备陀螺仪传感器数据的项目。它包含一个安卓应用、一个 Xposed 模块和一个 C++ 命令行工具，它们共同协作以实现对陀螺仪数据的自定义控制。\n\n## 主要功能\n\n*   **自定义陀螺仪偏移**: 用户可以通过安卓应用设置 X, Y, Z 轴的旋转偏移量。\n*   **实时数据修改**: Xposed 模块会读取这些偏移量，并实时应用到系统的陀螺仪事件中。\n*   **多种数据输入方式**:\n    *   **安卓应用界面**: 直接在应用内输入和保存设置。\n    *   **Socket 通信**: 安卓应用可以启动一个 Socket 服务器，接收外部发送的陀螺仪数据并更新设置。\n    *   **C++ 命令行工具**:\n        *   可以作为 Socket 客户端连接到安卓应用的服务器，发送固定的或模拟的陀螺仪数据。\n        *   可以直接修改配置文件 (SharedPreferences) 来更新陀螺仪设置。\n\n## 项目组件\n\n1.  **安卓应用 (`app` 目录)**:\n    *   提供用户界面 (`MainActivity.kt`) 来输入陀螺仪的 X, Y, Z 偏移值和 Socket 服务器端口。\n    *   将设置保存到 SharedPreferences 文件 (`/data/user/0/com.example.gyrohook/shared_prefs/gyro_settings.xml`)。\n    *   内置一个 Socket 服务器，用于接收外部发送的陀螺仪数据，并更新应用的设置。\n\n2.  **Xposed 模块 (`app` 目录中的 `GyroHook.kt`)**:\n    *   在 Xposed 框架下运行。\n    *   读取由安卓应用保存的 SharedPreferences 文件中的陀螺仪偏移值。\n    *   Hook 系统底层的传感器事件分发方法 (`dispatchSensorEvent`)。\n    *   当检测到陀螺仪传感器事件时，将配置的偏移量添加到原始传感器数据上。\n\n3.  **C++ 命令行工具 (`test` 目录)**:\n    *   `main.cpp`: 主程序，提供了两种操作模式。\n        *   **`socket` 模式**:\n            *   作为客户端连接到安卓应用中运行的 Socket 服务器。\n            *   可以发送一次性的固定 X, Y, Z 值。\n            *   可以模拟连续的陀螺仪运动并周期性发送数据。\n        *   **`file` 模式**:\n            *   直接读取并修改 SharedPreferences 文件 (默认路径: `/data/user/0/com.example.gyrohook/shared_prefs/gyro_settings.xml`)。\n            *   注意: 该工具会将数据以 JSON 格式写入文件，而原生 SharedPreferences 是 XML 格式。这依赖于 Xposed 模块或应用端对此的兼容处理。\n    *   `GyroHook.cpp` / `GyroHook.hpp`: 包含了 C++ 客户端的 Socket 通信逻辑 (`GyroClient` 类) 和文件操作逻辑 (`GyroFileUtils` 命名空间)。\n\n## 工作流程\n\n1.  **设置**: 用户通过安卓应用 `MainActivity` 设置陀螺仪的 X, Y, Z 偏移值和 Socket 通信端口。这些设置被保存到应用的 SharedPreferences 文件中。\n2.  **Hook 与修改**:\n    *   Xposed 模块 `GyroHook` 在系统层面加载。\n    *   它会读取 SharedPreferences 中的设置。\n    *   当任何应用请求陀螺仪数据时，`GyroHook` 会截获原始数据，并根据用户的设置进行修改，然后将修改后的数据传递给请求的应用。\n3.  **外部控制 (可选)**:\n    *   **通过 Socket**:\n        1.  安卓应用启动 Socket 服务器。\n        2.  C++ 命令行工具以 `socket` 模式运行，连接到该服务器。\n        3.  C++ 工具发送新的 X, Y, Z 数据。\n        4.  安卓应用收到数据后，更新界面显示，并将新设置保存回 SharedPreferences。Xposed 模块随后会读取到新的设置。\n    *   **通过文件修改**:\n        1.  C++ 命令行工具以 `file` 模式运行。\n        2.  直接修改 SharedPreferences 文件内容。\n        3.  Xposed 模块在下次读取配置时（例如，传感器事件触发时重新加载配置）会获取到新的设置。\n\n## 如何使用 C++ 命令行工具 (`main`)\n\n编译 `test` 目录下的 `main.cpp` 和 `GyroHook.cpp` (例如使用 g++)。\n\n**基本用法:**\n\n```bash\n./main \u003cmode\u003e [options]\n```\n\n**模式 (`mode`):**\n\n*   `socket`: 通过 Socket 发送数据。\n*   `file`: 直接修改配置文件。\n\n**Socket 模式选项 (`./main socket [ip_address] [port] [x y z]`):**\n\n*   `ip_address`: 服务器 IP 地址 (默认: `127.0.0.1`)。\n*   `port`: 服务器端口 (默认: `16384`)。\n*   `x y z`: (可选) 要发送的固定 X, Y, Z 值。如果提供，则只发送一次。如果不提供，则进入模拟持续发送模式。\n\n    *   示例 (模拟发送到指定 IP 和端口):\n        ```bash\n        ./main socket 192.168.1.100 12345\n        ```\n    *   示例 (发送一次固定值到默认 IP 和端口):\n        ```bash\n        ./main socket 127.0.0.1 16384 1.0 2.5 -0.5\n        ```\n    *   示例 (发送一次固定值 X,Y，Z 默认为 0，到默认 IP 和端口):\n        ```bash\n        ./main socket 127.0.0.1 16384 1.0 2.5\n        ```\n\n\n**文件模式选项 (`./main file [file_path] \u003cx\u003e \u003cy\u003e \u003cz\u003e [port_value]`):**\n\n*   `file_path`: (可选) 配置文件的完整路径 (默认: `/data/user/0/com.example.gyrohook/shared_prefs/gyro_settings.xml`)。\n*   `x y z`: 要写入文件的 X, Y, Z 值 (必需)。\n*   `port_value`: (可选) 要写入文件的端口值 (默认: `16384`)。\n\n    *   示例 (使用自定义路径、值和端口):\n        ```bash\n        ./main file /sdcard/my_settings.json 0.1 0.2 0.3 12345\n        ```\n    *   示例 (使用默认路径，提供 X, Y, Z 值和端口):\n        ```bash\n        ./main file 0.1 0.2 0.3 12345\n        ```\n    *   示例 (使用默认路径和端口，提供 X, Y, Z 值):\n        ```bash\n        ./main file 0.1 0.2 0.3\n        ```\n\n## 注意事项\n\n*   **Xposed 依赖**: `GyroHook.kt` 模块的运行需要设备上已安装并激活 Xposed 框架。\n*   **文件权限**: 确保配置文件具有正确的读写权限，以便应用、Xposed 模块和 C++ 工具能够正常访问。安卓应用在保存设置时会尝试设置文件权限。\n*   **配置文件格式**: C++ 工具目前以 JSON 格式写入配置文件，而安卓的 SharedPreferences 通常是 XML 格式。`XSharedPreferences` 在读取时需要能正确解析这种由 C++ 工具写入的 JSON 格式文件，或者 C++ 工具生成的文件需要与 `XSharedPreferences` 的期望格式一致。目前代码中 C++ 端写入的是一个纯 JSON 字符串到 `.xml` 后缀的文件。\n\n## 许可\n\n本项目采用 MIT 许可证。详细信息请参阅 `LICENSE` 文件。 ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAFan4724%2FGyroHook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAFan4724%2FGyroHook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAFan4724%2FGyroHook/lists"}