Android distribution surface

Tailored for the single-app Android distribution architecture

One Android package, channel-aware distribution, and stable public URLs.

SecPal keeps Device Owner provisioning, direct APK delivery, GitHub releases, and Obtainium compatibility on the same signed app package: app.secpal.

Channels without a second app flavor

The APK stays identical. Channel metadata, provisioning context, and rollout policy decide how the same package is delivered and updated.

managed_device

Managed device

Private provisioning QR flows for Device Owner enrollment. The machine-facing metadata stays stable while the tenant-bound bootstrap token remains short-lived.

/android/channels/managed_device/latest.json

direct_apk

Direct APK

Human-driven installs that should always resolve to a latest APK URL, checksum, and metadata document under apk.secpal.app.

/android/channels/direct_apk/latest.json

github_release

GitHub release

Public release notes can continue to live on GitHub Releases while the canonical machine endpoints stay anchored on apk.secpal.app.

/android/channels/github_release/latest.json

obtainium

Obtainium

Update tooling can poll a stable JSON endpoint instead of scraping HTML or guessing release filenames.

/android/channels/obtainium/latest.json

Stable endpoints for humans and machines

The landing route stays human-readable on secpal.app. All machine-facing URLs are defined against apk.secpal.app so later release automation can switch storage backends without changing clients.

Latest channel metadata

https://apk.secpal.app/android/channels/{channel}/latest.json

https://apk.secpal.app/android/channels/{channel}/app.secpal-latest.apk

https://apk.secpal.app/android/channels/{channel}/SHA256SUMS.txt

Versioned release assets

https://apk.secpal.app/android/releases/{version}/metadata.json

https://apk.secpal.app/android/releases/{version}/app.secpal-{version}.apk

https://apk.secpal.app/android/releases/{version}/SHA256SUMS.txt

Hosting is defined. Binary storage is still an explicit release decision.

This repository now defines the public route structure and metadata contract. The backing APK storage choice, such as GitHub Releases, object storage, or a CDN, still needs an explicit release-time decision before automation is wired up.

  • secpal.app/android stays the human-facing entry point.
  • apk.secpal.app stays the canonical technical host for APKs, checksums, and metadata.
  • The same signed APK must remain available across GitHub and apk.secpal.app.