安装包图标

RWR: onlooker alert

Warns you when someone behind you looks at your screen (shoulder surfing)
新版本 1.6.0
1.6.0: servers behind authentik.
- If your RWR server sits behind authentik forward auth (e.g. Nginx Proxy Manager + authentik), RWR now signs in with authentik in the browser (OAuth 2 + PKCE) and keeps working in the background. Setup: docs/authentik.md.
RWR watches through the front camera for people looking at your screen from behind (shoulder surfers). When it sees one, it:

  • pops up a card over whatever app you are using with a snapshot of the onlooker (boxed in red, with "laser eyes" showing where they look),

  • posts a notification,

  • saves a photo or a short video clip (for example 10 s before to 10 s after) to your gallery, and optionally to your own Immich server.


It runs in the background and can be switched on and off from the Quick Settings panel.

Detection

  • Head tracking: a face turned toward the screen counts as looking. Lightest on battery.

  • Eye tracking: follows the irises and combines them with head pose, so it alerts only when the eyes point at the screen.

  • Your own face is recognised and ignored, and faces too far away to read the screen don't count.

  • A debug view shows live what the detector sees and why each face counts or not.



Private by design

  • Detection runs on the phone, offline, with bundled open-source models (YuNet and MediaPipe Face Landmarker). No analytics, no ads, no accounts.

  • Nothing leaves the phone unless you pair it with your own RWR server (Docker, open source, in the same repository). Then frames go only to your server, over TLS: detection runs there at full frame rate without draining your battery, and snapshots can be uploaded to Immich.

  • The camera is always off while the screen is off. Android shows its camera indicator while RWR is watching.



Requires Android 10 or newer and a front camera. The pop-up needs the "Display over other apps" permission.

版本

尽管下面提供了 APK 安装包的下载选项,但你应该注意,以这种方式安装将不会收到更新通知,这是一种不太安全的下载方式。 我们建议你安装使用 F-Droid 客户端。

下载 F-Droid
  • 版本 1.6.0 (93) 推荐 更新于 2026-10-25

    x86_64

    该版本需要 Android 10 及以上版本。

    此安装包由 F-Droid 构建并签名,且保证与此源代码 tarball 保持一致。

    权限
    • 拍摄照片和视频
      当你使用此应用时,它可以使用相机拍摄照片和录制视频。
    • 运行前台服务
      允许此应用使用前台服务。
    • 运行“camera”类型的前台服务
      允许该应用使用“camera”类型的前台服务
    • 拥有完全的网络访问权限
      允许此应用创建网络套接字和使用自定义网络协议。浏览器和其他应用提供了将数据发送到互联网的方法,因此不需要此权限将数据发送到互联网。
    • 显示通知
      允许该应用显示通知
    • 此应用可显示在其他应用上方
      此应用可显示在其他应用或屏幕其他部分的上方。这会干扰正常的应用使用,并改变其他应用的显示方式。
    • io.github.revocx35.rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    下载 APK 16 MiB PGP 签名 | 构建日志

  • 版本 1.6.0 (92) - 更新于 2026-10-25

    arm64-v8a

    该版本需要 Android 10 及以上版本。

    此安装包由 F-Droid 构建并签名,且保证与此源代码 tarball 保持一致。

    权限
    • 拍摄照片和视频
      当你使用此应用时,它可以使用相机拍摄照片和录制视频。
    • 运行前台服务
      允许此应用使用前台服务。
    • 运行“camera”类型的前台服务
      允许该应用使用“camera”类型的前台服务
    • 拥有完全的网络访问权限
      允许此应用创建网络套接字和使用自定义网络协议。浏览器和其他应用提供了将数据发送到互联网的方法,因此不需要此权限将数据发送到互联网。
    • 显示通知
      允许该应用显示通知
    • 此应用可显示在其他应用上方
      此应用可显示在其他应用或屏幕其他部分的上方。这会干扰正常的应用使用,并改变其他应用的显示方式。
    • io.github.revocx35.rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    下载 APK 14 MiB PGP 签名 | 构建日志

  • 版本 1.6.0 (91) - 更新于 2026-10-25

    armeabi-v7a

    该版本需要 Android 10 及以上版本。

    此安装包由 F-Droid 构建并签名,且保证与此源代码 tarball 保持一致。

    权限
    • 拍摄照片和视频
      当你使用此应用时,它可以使用相机拍摄照片和录制视频。
    • 运行前台服务
      允许此应用使用前台服务。
    • 运行“camera”类型的前台服务
      允许该应用使用“camera”类型的前台服务
    • 拥有完全的网络访问权限
      允许此应用创建网络套接字和使用自定义网络协议。浏览器和其他应用提供了将数据发送到互联网的方法,因此不需要此权限将数据发送到互联网。
    • 显示通知
      允许该应用显示通知
    • 此应用可显示在其他应用上方
      此应用可显示在其他应用或屏幕其他部分的上方。这会干扰正常的应用使用,并改变其他应用的显示方式。
    • io.github.revocx35.rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    下载 APK 13 MiB PGP 签名 | 构建日志

  • 新版本 1.5.0
    First F-Droid release (1.5.0).
    - Face detection now uses the open-source YuNet detector (same as the RWR server) instead of Google ML Kit: about half the CPU, and good at small faces.
    - MediaPipe's usage-statistics client can no longer send anything: its Google telemetry transport is replaced by a do-nothing stand-in.
    - Fewer false alerts: far-away faces never count, every candidate face is verified, an onlooker must stay half a second.
  • 版本 1.5.0 (83) - 更新于 2026-10-18

    x86_64

    该版本需要 Android 10 及以上版本。

    此安装包由 F-Droid 构建并签名,且保证与此源代码 tarball 保持一致。

    权限
    • 拍摄照片和视频
      当你使用此应用时,它可以使用相机拍摄照片和录制视频。
    • 运行前台服务
      允许此应用使用前台服务。
    • 运行“camera”类型的前台服务
      允许该应用使用“camera”类型的前台服务
    • 拥有完全的网络访问权限
      允许此应用创建网络套接字和使用自定义网络协议。浏览器和其他应用提供了将数据发送到互联网的方法,因此不需要此权限将数据发送到互联网。
    • 显示通知
      允许该应用显示通知
    • 此应用可显示在其他应用上方
      此应用可显示在其他应用或屏幕其他部分的上方。这会干扰正常的应用使用,并改变其他应用的显示方式。
    • io.github.revocx35.rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    下载 APK 16 MiB PGP 签名 | 构建日志

  • 版本 1.5.0 (82) - 更新于 2026-10-18

    arm64-v8a

    该版本需要 Android 10 及以上版本。

    此安装包由 F-Droid 构建并签名,且保证与此源代码 tarball 保持一致。

    权限
    • 拍摄照片和视频
      当你使用此应用时,它可以使用相机拍摄照片和录制视频。
    • 运行前台服务
      允许此应用使用前台服务。
    • 运行“camera”类型的前台服务
      允许该应用使用“camera”类型的前台服务
    • 拥有完全的网络访问权限
      允许此应用创建网络套接字和使用自定义网络协议。浏览器和其他应用提供了将数据发送到互联网的方法,因此不需要此权限将数据发送到互联网。
    • 显示通知
      允许该应用显示通知
    • 此应用可显示在其他应用上方
      此应用可显示在其他应用或屏幕其他部分的上方。这会干扰正常的应用使用,并改变其他应用的显示方式。
    • io.github.revocx35.rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    下载 APK 14 MiB PGP 签名 | 构建日志

  • 版本 1.5.0 (81) - 更新于 2026-10-18

    armeabi-v7a

    该版本需要 Android 10 及以上版本。

    此安装包由 F-Droid 构建并签名,且保证与此源代码 tarball 保持一致。

    权限
    • 拍摄照片和视频
      当你使用此应用时,它可以使用相机拍摄照片和录制视频。
    • 运行前台服务
      允许此应用使用前台服务。
    • 运行“camera”类型的前台服务
      允许该应用使用“camera”类型的前台服务
    • 拥有完全的网络访问权限
      允许此应用创建网络套接字和使用自定义网络协议。浏览器和其他应用提供了将数据发送到互联网的方法,因此不需要此权限将数据发送到互联网。
    • 显示通知
      允许该应用显示通知
    • 此应用可显示在其他应用上方
      此应用可显示在其他应用或屏幕其他部分的上方。这会干扰正常的应用使用,并改变其他应用的显示方式。
    • io.github.revocx35.rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    下载 APK 13 MiB PGP 签名 | 构建日志