Play Console flags the app under Technical quality → Bad behavior: user-perceived crash rate 3.64% against Google's 1.09% threshold, which reduces discoverability. Per-version crash clusters from the Play Developer Reporting API, last 7 days (2026-09-07 → 09-14):
versionCode 40 (v0.14.0b2, the bulk of installs)
| reports |
users |
cluster |
status |
| 532 |
91 |
BackgroundService.onCreate → ForegroundServiceStartNotAllowedException |
fixed by #257, shipped in v0.14.1 |
| 9 |
6 |
AlarmReceiver.onReceive → ForegroundServiceStartNotAllowedException |
fixed by #257, shipped in v0.14.1 |
| 57 + 26 |
1 + 3 |
libaw_sync.so Rust panic → SIGABRT |
open, #220 |
| 31 + 6 |
1 |
Java_net_activitywatch_android_… JNI entry in libaw_server.so → SIGABRT |
open (a Rust panic unwinding across the extern "C" JNI boundary aborts the process) |
| 22 |
3 |
libaw_server.so → SIGABRT |
open, same class |
| 16 |
8 |
AccessibilityNodeTraversal.findNode → StackOverflowError |
open (recursive traversal, no depth bound) |
versionCode 41 (v0.14.0): no crash clusters; that release's problem was ANRs (#261).
versionCode 33 (v0.12.1, 2023): 324 reports / 61 users on ChromeWatcher.onAccessibilityEvent NPE plus 8 on ChromeWatcher.onInterrupt. The class no longer exists; only the update to 0.14.x fixes those users.
What this means for the metric: the largest cluster by far (541 reports, 97 users) is already fixed in v0.14.1, so the rate should drop substantially as it rolls out. The v0.12.1 stragglers will keep a floor until they update. The remaining actionable work:
- Native panics must not abort the process: wrap every JNI entry point in
libaw_sync and libaw_server with catch_unwind and return an error object (a Rust panic reaching extern "C" is an abort since Rust 1.81). Fixing the underlying #220 panic is the second half.
findNode / forEachNode: iterative traversal with a depth and node budget instead of unbounded recursion.
- Re-check this metric two weeks after v0.14.1 is at 100%.
Play Console flags the app under Technical quality → Bad behavior: user-perceived crash rate 3.64% against Google's 1.09% threshold, which reduces discoverability. Per-version crash clusters from the Play Developer Reporting API, last 7 days (2026-09-07 → 09-14):
versionCode 40 (v0.14.0b2, the bulk of installs)
BackgroundService.onCreate→ForegroundServiceStartNotAllowedExceptionAlarmReceiver.onReceive→ForegroundServiceStartNotAllowedExceptionlibaw_sync.soRust panic →SIGABRTJava_net_activitywatch_android_…JNI entry inlibaw_server.so→SIGABRTextern "C"JNI boundary aborts the process)libaw_server.so→SIGABRTAccessibilityNodeTraversal.findNode→StackOverflowErrorversionCode 41 (v0.14.0): no crash clusters; that release's problem was ANRs (#261).
versionCode 33 (v0.12.1, 2023): 324 reports / 61 users on
ChromeWatcher.onAccessibilityEventNPE plus 8 onChromeWatcher.onInterrupt. The class no longer exists; only the update to 0.14.x fixes those users.What this means for the metric: the largest cluster by far (541 reports, 97 users) is already fixed in v0.14.1, so the rate should drop substantially as it rolls out. The v0.12.1 stragglers will keep a floor until they update. The remaining actionable work:
libaw_syncandlibaw_serverwithcatch_unwindand return an error object (a Rust panic reachingextern "C"is an abort since Rust 1.81). Fixing the underlying#220panic is the second half.findNode/forEachNode: iterative traversal with a depth and node budget instead of unbounded recursion.