Self-hosted APK distribution
Memby is handed out from a NAS or web server rather than a store, so:
- UpdateChecker gains a static-manifest source alongside Gitea. A .json
update URL is read as a manifest ({version, apkUrl, notes}); anything
else is still treated as a Gitea host. apkUrl may be relative and is
resolved against the manifest's own URL.
- Release signing config reads memby.keystore from local.properties or
the environment. Without it the build still succeeds but warns loudly:
an unsigned APK will not install, and a changed key forces every user
to uninstall before they can update.
- release.ps1 bumps the version, runs tests, builds a signed APK and
assembles dist/out/ (landing page, latest.json, versioned APK) ready to
copy onto the NAS.
- Keystores and dist/out are gitignored.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2ce405c540
commit
08360b75e4
@@ -71,7 +71,20 @@ authorities all derive from it.
|
||||
|
||||
**Versioning.** `versionCode` is derived from `versionName`: `major*10000 + minor*100 +
|
||||
patch` (0.1.53 → 153). Bump both together — the in-app updater compares `versionName`,
|
||||
while Android refuses an APK whose `versionCode` went backwards.
|
||||
while Android refuses an APK whose `versionCode` went backwards. `release.ps1 -Version`
|
||||
rewrites both, so prefer it over editing the build file by hand.
|
||||
|
||||
**Releases.** APKs are self-hosted (NAS or any web server), not on a store. `release.ps1`
|
||||
builds a signed APK and assembles `dist/out/` — `index.html` (landing page from
|
||||
`dist/template/`), `latest.json` (the manifest the app polls) and the versioned APK.
|
||||
Release signing reads `memby.keystore` and friends from `local.properties`; with no
|
||||
keystore the build still succeeds but emits an unsigned APK and logs a warning. The key
|
||||
matters more than the code: Android identifies an app by applicationId **plus** signing
|
||||
key, so a changed key forces every user to uninstall and reinstall.
|
||||
|
||||
`UpdateChecker` supports two sources, chosen by URL shape in `isManifestUrl` — a `.json`
|
||||
URL is a static manifest, anything else is a Gitea host. `resolveApkUrl` lets a manifest
|
||||
use a relative `apkUrl`. Both are unit-tested in `UpdateSourceTest`.
|
||||
|
||||
## Architecture
|
||||
|
||||
|
||||
Reference in New Issue
Block a user