M1-04: Debug signing and on-device install #4

Open
opened 2026-08-08 20:03:43 -04:00 by agent · 0 comments
Member

Get a build onto the Pixel, and document the one path that does it.

Why this is much smaller than the iOS version

iOS M1-04 was called out as the schedule risk in the milestone — provisioning profiles, a
development team identifier, a minted profile per device, builds that expire. Android has none of
that. A debug keystore is generated automatically, adb install works over USB or Wi-Fi, and the
build does not expire.

It is still a blocker for everything after it, for the same reason: microphone routing,
foreground services, notification behaviour, doze and on-device speech all behave differently or
not at all on an emulator. Until this lands, nothing downstream can be honestly marked done.

Scope

  • Developer options and USB debugging on the Pixel, documented in README.md.
  • A one-command install path — a Gradle task or a Makefile target, matching the iOS repo's
    make install so the two repos feel the same to work in.
  • Wireless debugging documented as well. Recording tests happen on a walk, and a tethered phone is
    not on a walk.

⚠️ Public repo

A debug keystore is fine to regenerate and is gitignored, not committed. A release keystore never
enters this repository under any circumstance
— not the file, not the passwords, not in history.
Release signing is not needed for M1 and the question of where that key lives is deferred with a
note in AGENTS.md rather than answered casually now.

Done when

One documented command puts the current build on the Pixel, over a cable and over Wi-Fi.


Milestone 1 of Stash for Android, mirroring stash-ios M1. M1 is a functioning app on the test
device with no sync at all — record voice memos reliably and get them off the device by hand.
Sync arrives in M3.

Test device is a Pixel 6 (Tensor G1) borrowed from a friend, until something better turns up.
Stock Android, so no OEM battery-killer behaviour to fight — worth remembering that a phone from
another manufacturer may not be as forgiving about background work.

Translation of Stash/stash-ios#4. Where the platform forces a different answer this issue says so; where it
does not, the iOS issue is the fuller statement of intent and should be read alongside this one.

Working agreement for every issue in this repo: feature branch, tested before the PR opens
(on-device where the label says so), then Wes reviews the PR and we walk the code together. Docs
update in the same commit. A PR that takes more than 20 minutes to review is too big — say so and
split it.

Get a build onto the Pixel, and document the one path that does it. ## Why this is much smaller than the iOS version iOS M1-04 was called out as *the* schedule risk in the milestone — provisioning profiles, a development team identifier, a minted profile per device, builds that expire. Android has none of that. A debug keystore is generated automatically, `adb install` works over USB or Wi-Fi, and the build does not expire. **It is still a blocker for everything after it**, for the same reason: microphone routing, foreground services, notification behaviour, doze and on-device speech all behave differently or not at all on an emulator. Until this lands, nothing downstream can be honestly marked done. ## Scope - Developer options and USB debugging on the Pixel, documented in `README.md`. - A one-command install path — a Gradle task or a `Makefile` target, matching the iOS repo's `make install` so the two repos feel the same to work in. - Wireless debugging documented as well. Recording tests happen on a walk, and a tethered phone is not on a walk. ## ⚠️ Public repo A debug keystore is fine to regenerate and is gitignored, not committed. **A release keystore never enters this repository under any circumstance** — not the file, not the passwords, not in history. Release signing is not needed for M1 and the question of where that key lives is deferred with a note in `AGENTS.md` rather than answered casually now. ## Done when One documented command puts the current build on the Pixel, over a cable and over Wi-Fi. --- *Milestone 1 of Stash for Android, mirroring `stash-ios` M1. M1 is a functioning app on the test device with **no sync at all** — record voice memos reliably and get them off the device by hand. Sync arrives in M3.* *Test device is a **Pixel 6** (Tensor G1) borrowed from a friend, until something better turns up. Stock Android, so no OEM battery-killer behaviour to fight — worth remembering that a phone from another manufacturer may not be as forgiving about background work.* *Translation of `Stash/stash-ios#4`. Where the platform forces a different answer this issue says so; where it does not, the iOS issue is the fuller statement of intent and should be read alongside this one.* *Working agreement for every issue in this repo: feature branch, tested before the PR opens (on-device where the label says so), then Wes reviews the PR and we walk the code together. Docs update in the same commit. A PR that takes more than 20 minutes to review is too big — say so and split it.*
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Stash/stash-android#4
No description provided.