在 Android 生态中,“摇一摇”广告已成为一种令人厌烦的交互侵扰——仅仅拿起手机或走两步路,应用便误判动作并强制跳转至广告页。NoShake 是一款专为对抗此类行为设计的 Android 工具。它不依赖传统的广告拦截规则,而是从系统底层入手,通过控制 SensorService(传感器服务) 的访问权限,从根本上切断应用读取加速度计等运动传感器的途径,让手机回归宁静。
核心亮点:系统级拦截、灵活控制
1. 一键全局屏蔽
- 彻底静音:一键关闭所有第三方应用的运动传感器访问权限,从源头杜绝“摇一摇”触发。
- 快速恢复:支持一键恢复全部应用的传感器正常访问,便于需要运动功能的场景(如健身、游戏)。
2. 精细化白名单管理
- 单应用例外:在全局屏蔽状态下,可单独允许某个特定应用(如微信步数、地图导航)使用运动传感器。
- 智能同步:自动读取设备当前 SensorService 状态,即使通过外部 ADB/Shizuku 操作,回到 App 也能实时同步 UI 显示。
3. 多权限模式支持
- Root 模式:在已 Root 设备上,直接通过
su执行系统命令,操作最便捷。 - 非 Root 模式:无需 Root,通过 Shizuku 或 无线 ADB 获取 shell 权限即可运行,降低了使用门槛。
技术原理:SensorService 受限模式
NoShake 利用了 Android 系统底层的 SensorService 受限模式(Restricted Mode),而非应用层的 Hook 或拦截:
- 核心命令:
dumpsys sensorservice enable:恢复 SensorService 正常模式(所有应用可读取)。dumpsys sensorservice restrict <package>:进入受限模式,仅允许指定包名的应用读取传感器。
- 工作逻辑:
- 当设置为
restrict com.example.noshake时,相当于屏蔽了除 NoShake 自身外所有应用的传感器访问。 - 当设置为
restrict com.target.app时,相当于仅开启目标应用的传感器访问。
- 当设置为
- 状态解析:App 通过解析
dumpsys sensorservice输出中的Mode : NORMAL或Mode : RESTRICTED来确认当前状态。
快速上手
1. 非 Root 用户(推荐 Shizuku/ADB)
方式 A:使用 Shizuku
- 安装并启动 Shizuku 应用。
- 在 NoShake 中选择“Shizuku 模式”,授权后即可一键操作。
方式 B:使用无线 ADB
- 开启开发者选项中的“无线调试”。
- 配对并连接 ADB。
- 手动执行命令(或通过 NoShake 引导):
# 屏蔽其他应用,仅允许 NoShake adb shell "dumpsys sensorservice enable && dumpsys sensorservice restrict 'com.example.noshake'" # 恢复全部开启 adb shell "dumpsys sensorservice enable"
2. Root 用户
- 授予 NoShake Root 权限。
- App 内部自动通过
su -c执行上述命令,无需额外配置。
注意事项与限制
- 非传统广告拦截:NoShake 控制的是传感器硬件访问,不仅影响广告,也会影响所有依赖运动传感器的功能(如计步、摇一摇换歌、体感游戏)。请根据需求合理使用白名单。
- 重启失效:SensorService 的受限模式通常不保证重启后保持。每次重启设备后,需重新应用设置(可配合自动化工具如 Tasker/MacroDroid 实现开机自启)。
- 厂商差异:不同 Android 厂商(小米、华为、三星等)可能修改 SensorService 行为,实际效果请以真机测试为准。
- 权限要求:普通无权限 APK 无法拦截其他应用传感器事件,必须通过 Shell 权限(Root/Shizuku/ADB)执行系统命令。










