# Anonymous crash reporter ## Android - **Main process:** `CrashReporter.install()` — Java uncaught exceptions → JSON under `files/crash_reports/pending/`, session stats flushed with `globals.reason: "crash"`. - **Watcher process:** `CrashWatcherService` in `:crashwatcher` — reads `settings.json` → `crash`, uploads pending reports, ingests native stub files. - **Native:** `crash_hook.c` (unwind + `dladdr`) writes stubs to `crash_reports/native/`; watcher converts to schema v1 JSON. - **User toggle:** Settings drawer → **Send anonymous crash logs** (`AppPreferences.send_anonymous_crash_logs`, default on). Deploy tuning via app-private `files/settings.json` (see `examples/settings.json`): ```json "crash": { "enabled": "true", "upload_url": "https://f0xx.org/app/androidcast_project/crashes/api/upload.php", "prune_after_upload": "true", "upload_interval": "5m", "max_pending": 32 } ``` ## Backend PHP console and ingest API: `examples/crash_reporter/backend/` — see [README](../examples/crash_reporter/backend/README.md). Roadmap: `examples/crash_reporter/ROADMAP.md`.