A CLI-controllable Android browser for the RayNeo X3 Pro AR glasses, plus a host-side CLI (rn) that drives it over ADB.
TapLink (the default browser on RayNeo X3) has a custom on-screen keyboard that ignores adb shell input text, and it doesn't register an android.intent.action.VIEW handler, so URLs can't be opened programmatically. This repo ships:
browser/—com.jacobcole.rayneobrowser: a minimal Android WebView browser using standard widgets (works withadb input text, tab focus nav, andVIEWintents) plus a localhost HTTP control server on port7317.cli/rn— Mac-side CLI wrappingadb+ the browser's HTTP API.
# 1. Build & install the APK (requires JDK 17, Android SDK at /opt/homebrew/share/android-commandlinetools)
JAVA_HOME=/opt/homebrew/opt/openjdk@17 ./gradlew :app:assembleDebug
./cli/rn install
# 2. Use it
./cli/rn open https://google.com
./cli/rn type "core balance training"
./cli/rn key ENTER
./cli/rn shot # /tmp/rayneo.png
./cli/rn title
./cli/rn back
./cli/rn js 'document.querySelectorAll("a").length'Symlink for global use:
ln -sf "$(pwd)/cli/rn" /usr/local/bin/rn| Cmd | Purpose |
|---|---|
rn open URL |
Launch browser with VIEW intent |
rn type TEXT |
adb shell input text with shell-metachar escaping |
rn key KEY |
Keyevent (TAB, ENTER, BACK, DPAD_DOWN, …) |
rn tap X Y |
Tap screen coordinate |
rn swipe X1 Y1 X2 Y2 [MS] |
Swipe gesture |
rn shot [OUT] |
Screenshot PNG (default /tmp/rayneo.png) |
rn js 'CODE' |
Eval JS in WebView (returns result) |
rn dom |
Dump rendered DOM |
rn title |
Current page title + URL (JSON) |
rn back / rn fwd |
Browser back / forward |
rn ping |
Health check the control server |
rn install |
Install/reinstall APK |
rn forward |
Set up adb forward tcp:7317 |
Runs on 127.0.0.1:7317 inside the browser app. Accessible from Mac after adb forward tcp:7317 tcp:7317.
POST /url— JSON{url}→ navigatePOST /js— raw JS body → eval, return JSON resultGET /dom— rendered HTMLGET /screenshot— PNG of decor viewGET /back/GET /forward— navGET /title—{title, url}GET /ping— health
- Google search
- YouTube (loads video pages)
corebalancetraining.comlogin + post pages
- The RayNeo system sometimes overlays a settings dock when switching apps. Launching the browser again via
rn opengenerally brings it to front. - Text input uses
adb shell input text; special chars beyond the standard escape set may still need manual handling. - Screenshot captures the browser's own
decorView, not the entire display (so system overlays aren't captured). For full-display capture useadb exec-out screencap -p.
RayNeoTools/
├── browser/app/… # Android app (Kotlin)
├── cli/rn # Mac CLI
├── build.gradle.kts # root Gradle (AGP 8.7, Kotlin 2.0)
├── settings.gradle.kts
├── gradle.properties
├── gradle/wrapper/
└── .beads/ # issue tracking (bd)
Tracked under prefix rn-:
rn-be7(epic) — umbrellarn-db1— scaffold browser ✓rn-2c4— HTTP control server ✓rn-0ie—rnCLI ✓rn-881— install + verify ✓rn-cf8— YouTube-focused viewer (follow-on)rn-48z— AccessibilityService bridge (unlocks TapLink control)