ActivityWatch / ActivityWatch/aw-android

Play Store rating collapse (4.2→3.1) is driven by the ChromeWatcher.kt:76 NPE — data

未关闭
#185 6 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Kotlin
星标
265
派生
57
平均合并
2 天 21 小时
30 天内合并 PR
19

描述

## 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

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。