Skip to content

Give debug builds their own applicationId#4

Merged
ghackett merged 3 commits into
mainfrom
debug-app-id
Jul 14, 2026
Merged

Give debug builds their own applicationId#4
ghackett merged 3 commits into
mainfrom
debug-app-id

Conversation

@ghackett

@ghackett ghackett commented Jul 14, 2026

Copy link
Copy Markdown
Member

Debug builds now append a .debug applicationIdSuffix, so a local ./gradlew installDebug coexists with an installed CI-built snapshot APK instead of clobbering it — or, more commonly, being rejected with INSTALL_FAILED_UPDATE_INCOMPATIBLE because the debug and CI signatures differ (exactly what happened during emulator verification of an earlier PR). The snapshot applicationId is also renamed to suffix style for consistency, so all identities share the com.episode6.headachetracker prefix:

Build applicationId
Release (CI tag builds) com.episode6.headachetracker
Snapshot (CI main/PR release APKs) com.episode6.headachetracker.snapshot
Local/debug builds com.episode6.headachetracker.snapshot.debug

Implementation

A plain applicationIdSuffix = ".debug" on the debug build type, plus the selfAppId snapshot value in the root build.gradle.kts changed from com.episode6.snapshots.headachetracker to com.episode6.headachetracker.snapshot. The namespace stays fixed, so R and manifest class references are unaffected. The launcher label is unchanged (debug builds still read "Headache Tracker (SNAPSHOT)" since they're snapshots).

The placeholder instrumented test asserted packageName.endsWith("headachetracker"), which the suffixes break — it now asserts the shared com.episode6.*headachetracker* shape. Docs and tooling that referenced the old packages were updated: the verify agent skill, the cursor install-debug skill + launch script, README, AGENTS.md, RELEASE_CHECKLIST, and CHANGELOG.

Note: anyone with an installed snapshot APK under the old com.episode6.snapshots.headachetracker id keeps that install orphaned — uninstall it manually; future snapshot installs land on the new id. (Nothing has shipped, so no release installs are affected.)

Verified locally

  • assembleDebugcom.episode6.headachetracker.snapshot.debug
  • assembleRelease (untagged) → com.episode6.headachetracker.snapshot
  • assembleRelease with GITHUB_REF=refs/tags/v1.0.0com.episode6.headachetracker, versionCode 2560000
  • ./gradlew check passes; CI device tests install the suffixed debug build.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Veyj5jEsiHxeSQbGraGZaH

ghackett and others added 3 commits July 13, 2026 21:35
com.episode6.debug.headachetracker, via the variant API (build types can
only append a suffix). A local installDebug now coexists with an
installed CI-built snapshot APK instead of clobbering it or being
blocked by its signature.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Veyj5jEsiHxeSQbGraGZaH
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Veyj5jEsiHxeSQbGraGZaH
Suffix-style like the new .debug suffix, so all identities share the
com.episode6.headachetracker prefix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Veyj5jEsiHxeSQbGraGZaH
@ghackett ghackett marked this pull request as ready for review July 14, 2026 02:04
@ghackett ghackett merged commit b652008 into main Jul 14, 2026
6 checks passed
@ghackett ghackett deleted the debug-app-id branch July 14, 2026 02:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant