# NoShake **Repository Path**: gald/no-shake ## Basic Information - **Project Name**: NoShake - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-06-09 - **Last Updated**: 2026-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NoShake NoShake 是一个用来对抗“摇一摇广告”的 Android 工具。 我很讨厌那种明明只是拿起手机、换个姿势、走两步路,应用却突然把动作识别成“摇一摇”,然后跳到广告页或第三方 App 的体验。它不是交互设计,是打扰。所以我做了这个 App:尽量把应用读取运动传感器的入口关掉,让手机重新安静一点。 ## 功能 - 一键关闭全部应用的运动传感器访问。 - 全部恢复开启。 - 在关闭状态下,只允许单个应用使用运动传感器。 - 支持 Root 模式,通过 `su` 执行系统命令。 - 支持非 Root 模式,通过 Shizuku/无线 ADB 获取 shell 权限执行系统命令。 - 支持读取设备当前 SensorService 状态,外部 ADB/Shizuku 操作后回到 App 会自动同步。 ## 技术原理 普通 Android 应用不能直接拦截其他应用的加速度计、陀螺仪等传感器事件,也不能只靠一个普通权限关闭别的 App 的“摇一摇”。NoShake 使用的是 Android SensorService 的受限模式: ```bash dumpsys sensorservice enable dumpsys sensorservice restrict ``` 其中: - `enable` 恢复 SensorService 的正常模式。 - `restrict ` 进入受限模式,只允许匹配的包名读取传感器。 - 当白名单包名是 NoShake 自身时,相当于关闭其他应用的运动传感器访问。 - 当白名单包名是某个目标应用时,相当于只开启这一个应用。 App 会解析 `dumpsys sensorservice` 输出中的模式信息: ```text Mode : NORMAL Mode : RESTRICTED : com.example.noshake ``` 从而同步 UI 状态。 ## 模式说明 ### Root 模式 Root 设备上,NoShake 通过: ```bash su -c "" ``` 直接执行 SensorService 命令。 ### 非 Root 模式 非 Root 设备上,需要 Shizuku 或无线 ADB 提供 shell 权限。普通 APK 本身没有权限执行 `dumpsys sensorservice restrict`。 可手动执行: ```bash adb shell "dumpsys sensorservice enable && dumpsys sensorservice restrict 'com.example.noshake'" ``` 恢复全部开启: ```bash adb shell "dumpsys sensorservice enable" ``` ## 限制 - 这是传感器访问控制,不是传统广告拦截器。 - 它会影响运动传感器读取,不只影响广告里的“摇一摇”逻辑。 - SensorService 受限模式通常不保证重启后保持,需要重新应用。 - 不同 Android 厂商系统可能修改 SensorService 行为,实际效果以设备为准。 - 普通无权限模式无法做到真正拦截其他 App 的传感器事件。 ## 构建 ```bash ./gradlew assembleDebug ``` Windows: ```bat gradlew.bat assembleDebug ``` 生成的 APK 位于: ```text app/build/outputs/apk/debug/app-debug.apk ``` ## 项目状态 这是一个面向个人使用和实验的工具。它的目标很简单:少一点误触广告,少一点被“摇一摇”绑架的手机体验。