openclaw/apps/android
ronitchidara fdc7e11891 mobile: Phase 4 polish - refactoring, app store prep, and infrastructure
Tier 5 - Code Refactoring:
- iOS: Split NodeAppModel.swift (988→493 LOC) into focused modules
  - NodeCommandHandlers.swift: command routing (372 LOC)
  - NodeGatewaySync.swift: gateway sync, branding (153 LOC)
- Android: Split NodeRuntime.kt (1268→756 LOC, 40% reduction)
  - NodeCommandHandlers.kt: command routing (326 LOC)
  - NodeGatewaySync.kt: gateway sync, A2UI helpers (294 LOC)

Tier 6 - App Store Preparation:
- iOS: Add PrivacyInfo.xcprivacy (iOS 17+ privacy manifest)
- Android: Add ProGuard rules and enable minification for release builds

Infrastructure (from earlier tiers):
- iOS: Add OfflineMessageQueue for disconnected message queueing
- iOS: Add PushManager for VoIP push foundation
- iOS: Add TTSVoiceSettingsView for voice selection
- Android: Add ClawdbotMessagingService for FCM push
- Android: Add SyncWorker for background chat sync
- Both: Deep linking support (clawdbot:// URL scheme)
- Both: Empty states and loading indicators in settings

Testing:
- iOS: Add OfflineMessageQueueTests (8 tests)
- Android: Add NodeGatewaySyncTest (11 tests)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:01:20 +05:30
..
app mobile: Phase 4 polish - refactoring, app store prep, and infrastructure 2026-01-28 17:01:20 +05:30
gradle/wrapper chore(android): update toolchain and deps 2025-12-14 02:37:47 +00:00
.gitignore feat(android): add Compose node app (bridge+canvas+chat+camera) 2025-12-14 01:55:40 +00:00
build.gradle.kts mobile: Phase 4 polish - refactoring, app store prep, and infrastructure 2026-01-28 17:01:20 +05:30
gradle.properties Android: add Voice Wake (foreground/always) 2025-12-18 02:08:57 +01:00
gradlew Android: add Voice Wake (foreground/always) 2025-12-18 02:08:57 +01:00
gradlew.bat Android: add Voice Wake (foreground/always) 2025-12-18 02:08:57 +01:00
README.md fix: shorten bonjour gateway service type 2026-01-20 15:10:06 +00:00
settings.gradle.kts refactor: rename clawdbot to moltbot with legacy compat 2026-01-27 12:21:02 +00:00

Clawdbot Node (Android) (internal)

Modern Android node app: connects to the Gateway WebSocket (_clawdbot-gw._tcp) and exposes Canvas + Chat + Camera.

Notes:

  • The node keeps the connection alive via a foreground service (persistent notification with a Disconnect action).
  • Chat always uses the shared session key main (same session across iOS/macOS/WebChat/Android).
  • Supports modern Android only (minSdk 31, Kotlin + Jetpack Compose).

Open in Android Studio

  • Open the folder apps/android.

Build / Run

cd apps/android
./gradlew :app:assembleDebug
./gradlew :app:installDebug
./gradlew :app:testDebugUnitTest

gradlew auto-detects the Android SDK at ~/Library/Android/sdk (macOS default) if ANDROID_SDK_ROOT / ANDROID_HOME are unset.

Connect / Pair

  1. Start the gateway (on your “master” machine):
pnpm clawdbot gateway --port 18789 --verbose
  1. In the Android app:
  • Open Settings
  • Either select a discovered gateway under Discovered Gateways, or use Advanced → Manual Gateway (host + port).
  1. Approve pairing (on the gateway machine):
clawdbot nodes pending
clawdbot nodes approve <requestId>

More details: docs/platforms/android.md.

Permissions

  • Discovery:
    • Android 13+ (API 33+): NEARBY_WIFI_DEVICES
    • Android 12 and below: ACCESS_FINE_LOCATION (required for NSD scanning)
  • Foreground service notification (Android 13+): POST_NOTIFICATIONS
  • Camera:
    • CAMERA for camera.snap and camera.clip
    • RECORD_AUDIO for camera.clip when includeAudio=true