Android updates with Obtainium
Obtainium tracks APK releases directly from their source. Install it first, then select a channel:
You can also download the JSON import file and import it from Obtainium’s Import/Export page. It contains both channels; select the one you want. The links above carry the same configuration, not just a URL.
Release contract pending
Section titled “Release contract pending”These import configurations select immutable combined product releases. Publication must confirm the following before they work end to end:
- Forgejo release titles start with
stable-orcanary-. - Each release contains only that channel’s client APKs with
.apkfilenames. - Each new release has a new title and publication date.
- Android application IDs and signing keys match the selected channel, and version codes increase for each ID.
Sync this JSON with the final pipeline if its titles or asset layout differ. No live APK installation or update has been verified yet.
Manual configuration
Section titled “Manual configuration”Use https://git.methanium.net/tensamin/prod-pins as the source URL, without
/releases or a channel suffix. In Override Source, select
Forgejo (Codeberg), called Codeberg in older versions. This is a
self-hosted Forgejo, so automatic host detection would select the HTML fallback.
The serialized source identifier is "overrideSource": "Codeberg".
Set the release-title filter to ^stable- or ^canary-, the APK filter to
[.]apk$, and allow prereleases only for canary. Enable architecture filtering
and fallback to older releases. If several compatible APKs remain, select the
correct one; architecture filtering uses filenames and is only a best effort.
The import enables Release Date as Version and disables Version Detection.
Obtainium’s pseudo-version tracks the release date, while Android still checks
signing identity and version code. The metadata-only stable and canary
releases have no APKs and are excluded by the title filters.
JSON and deep-link format
Section titled “JSON and deep-link format”The downloadable file is an array of app export objects. additionalSettings
is a JSON-encoded string inside each object, not a nested object. To create a
single-app link, serialize one object and URL-encode it:
const link = 'obtainium://app/' + encodeURIComponent(JSON.stringify(config));For the complete array use obtainium://apps/ with the encoded array.
obtainium://add?url=... only prefills a URL and omits our source override
and channel filters. Obtainium shows a confirmation before importing.
Verified against the official deep-link documentation and source documentation, plus the upstream app JSON model, Forgejo adapter, and release settings.