ActivityWatch Android 0.14.3 Released
ActivityWatch Android 0.14.3 ships per-ABI APKs, sync improvements, an import progress banner, and 16 bug fixes.
ActivityWatch Android 0.14.3 ships per-ABI APKs, sync improvements, an import progress banner, and 16 bug fixes.
ActivityWatch Android 0.14.3 is out. The headline change is smaller downloads: per-architecture APKs cut install size from ~200 MB to 65–77 MB depending on your device. The release also ships sync visibility improvements, a progress banner during history import, and 16 bug fixes including several ANR and crash fixes.
What’s new
Per-ABI APKs — smaller installs (#308)
The universal APK bundles native libraries for all architectures. Most devices only need one. Starting with 0.14.3, per-architecture APKs are published alongside the universal:
| APK | Device | Size |
|---|---|---|
aw-android-arm64-v8a.apk |
Most modern phones | ~65 MB |
aw-android-armeabi-v7a.apk |
Older/budget phones | ~65 MB |
aw-android-x86_64.apk |
Most emulators | ~77 MB |
aw-android-x86.apk |
Older emulators | ~77 MB |
aw-android.apk |
Universal fallback | ~200 MB |
If you know your device’s architecture (check Settings → About phone → CPU type, or look for “arm64”), grab the matching APK for a 65% smaller install. The universal APK still works if you’re unsure.
Sync improvements
Two sync fixes that reduce noise and bandwidth:
- Peer hostnames in sync report UI (#303): the sync report now shows the actual hostname of each peer instead of an opaque identifier. You can see at a glance which devices synced and which didn’t.
- Sync only once per interval (#340): a bug caused each scheduled sync to run twice. Fixed — halves the bandwidth and battery impact of sync.
Import progress banner (#316)
When you open the app while historical data is still importing, a banner now tells you so. Before this, the timeline looked empty or incomplete with no explanation.
Bug fixes (16)
A large fix batch. The most user-visible:
- Bucket hostname rewrite at startup (#354): bucket hostnames are now rewritten to the canonical form before anything opens the datastore. Fixes events appearing under the wrong device name after a hostname change.
- Single-instance server startup (#324): the server startup guard is now atomic. Fixes a race that could start two server instances on fast launches.
- Browser events off main thread (#344): browser event writes moved off the accessibility main thread. Fixes ANR reports from the web watcher on some devices.
- Deferred RustInterface init (#325): Rust initialization now happens on an IO thread. Reduces startup ANRs on slower devices.
- Server socket crash fix (#315): the app no longer crashes at startup if the server socket can’t be created (port conflict, permissions).
- Large export streaming (#304): large JSON exports now stream to a cache file instead of buffering in memory. Fixes OOM crashes on data-heavy exports.
- WebView back navigation (#327): the back button now navigates through WebView history before closing the activity.
- Dark mode for sync settings (#326): the Sync Settings screen now follows system dark mode.
- In-progress session counted (#337): the foreground session in progress is now included in the usage count.
Performance
- RustInterface constructed off main thread (#346): faster app startup, especially on first launch.
- SAF sync skips unchanged files (#347): the SAF directory mirror no longer re-copies files that haven’t changed. Faster sync on large datasets.
Get it
Download from the GitHub releases page. Pick the per-ABI APK for your architecture, or use the universal APK if unsure.
The release is also available on F-Droid (may take a few days to propagate).
Thanks to the contributors: @0xbrayo, @ErikBjare, and @TimeToBuildBob.