ActivityWatch / ActivityWatch/aw-android
Play Store rating collapse (4.2→3.1) is driven by the ChromeWatcher.kt:76 NPE — data
- Langage dominant
- Kotlin
- Étoiles
- 265
- Forks
- 57
- Merge moyen
- 2 j 21 h
- PR mergées (30 j)
- 19
Description
## The Play Store rating is collapsing, and the data points at one specific crash
We now auto-collect Android vitals + rating history in [ActivityWatch/stats](https://github.com/ActivityWatch/stats) (see ActivityWatch/stats#17). Pulling it together makes the picture clear.
### Rating is in free-fall (`data/android-ratings.csv`)
| Date | Store rating |
|---|---|
| 2019 | 5.00 |
| 2022–2024 | ~4.4–4.5 |
| Jan 2026 | 4.21 |
| **Jun 2026** | **3.15** |
A ~1-point drop in ~6 months.
### Crash rate spiked over the same window (`data/android-crash-rate.csv`)
User-perceived crash rate ~**8–9%** (over Google's ~8% bad-behavior threshold); raw crash rate ~15–27%/day. User-perceived **ANR is ~0%** — this is a *crash* problem, not ANR.
### One crash dominates (`vitals.py errors`)
| Reports | Exception | Location |
|--------:|-----------|----------|
| **791** | `NullPointerException` | `ChromeWatcher.onAccessibilityEvent` (**ChromeWatcher.kt:76**) |
| 26 | `NotImplementedError` | `ChromeWatcher.onInterrupt` |
| ~22 | `SIGABRT` | `libaw_server.so` (Rust OOM) |
The #1 cluster (791) dwarfs everything else combined. Stacktrace:
```
Exception java.lang.NullPointerException:
at net.activitywatch.android.watcher.ChromeWatcher.onAccessibilityEvent (ChromeWatcher.kt:76)
at android.accessibilityservice.AccessibilityService$2.onAccessibilityEvent (AccessibilityService.java:2744)
...
```
### Conclusion
The rating collapse tracks the crash spike, and the crash spike is essentially **one NPE at `ChromeWatcher.kt:76`**. So the highest-leverage lever for *both* crash rate and rating recovery is:
1. **Null-guard `ChromeWatcher.kt:76`** (`onAccessibilityEvent`).
2. **Cut a fresh release from `master`** (~124 commits ahead of the 2023 Play build; already carries merged ANR fixes).
That one fix + a release should take the crash rate from ~9% toward the Rust-OOM floor and start the rating recovering.
### Reproduce the data yourself
In `ActivityWatch/stats` (key already on your machine):
```
uv run vitals.py errors --limit 10 --stacktraces
uv run vitals.py summary
# rating history: data/android-ratings.csv
```
Related: #176 (crash/ANR tracking — this issue is the rating-impact analysis). cc @TimeToBuildBob
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Évaluation
Cette issue n'a pas encore été évaluée.