Docs: new package ID and APK names

OTA.md, mise.toml and docs/MG4_PLATFORM_INSTALL.md now use
com.stinnesbeck.nilsmg4(.unstable) and NilsMG4-*.apk. OTA.md says the
updater is switched off and that its publishing steps are upstream's
GitHub process; it also drops the old four-part version example.
CHANGELOG.md keeps the old ID as upstream history.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QLJfZQZeAKAwSqViTmLzki
This commit is contained in:
2026-10-18 00:09:52 +02:00
co-authored by Claude Opus 5.5
parent 4b858e3c35
commit 9bebf56b3a
4 changed files with 23 additions and 17 deletions
+14 -9
View File
@@ -17,7 +17,8 @@ UI; it becomes available to OTA only after publication as a pre-release asset na
`FatihsMG4-unstable-2.2.7.apk`, together with `FatihsMG4-unstable-2.2.7.apk`, together with
`FatihsMG4-unstable-2.2.7.apk.sha256`. `FatihsMG4-unstable-2.2.7.apk.sha256`.
The vehicle artifact uses `com.evsuite.abrp.unstable`, `android.uid.system`, and the The vehicle artifact uses `com.stinnesbeck.nilsmg4.unstable` (upstream: `com.evsuite.abrp.unstable`),
`android.uid.system`, and the
DriveHub_Kamera platform key. Its certificate SHA-256 must be DriveHub_Kamera platform key. Its certificate SHA-256 must be
`c8a2e9bccf597c2fb6dc66bee293fc13f2fc47ec77bc6b2b0d52c11f51192ab8`. `c8a2e9bccf597c2fb6dc66bee293fc13f2fc47ec77bc6b2b0d52c11f51192ab8`.
The stable build used for a Samsung UI preview is a separate package without OTA or the The stable build used for a Samsung UI preview is a separate package without OTA or the
@@ -25,8 +26,12 @@ vehicle's shared UID; do not use that preview APK for the MG4 upgrade.
## What the updater actually looks for ## What the updater actually looks for
`OtaUpdater.check()` reads `https://api.github.com/repos/fatihdonmezdev/FatihsMG4/releases` > **Switched off in Nils' MG4.** `RELEASES_API` points at `updates.invalid`, so every check
and walks **every** entry, keeping the highest version rather than the first match. A > fails. To re-enable it, point it at this repository's releases and add the host to
> `ALLOWED_HOSTS` (see `SPECS.md`). The steps below are upstream's GitHub process.
`OtaUpdater.check()` reads the `RELEASES_API` URL (upstream:
`https://api.github.com/repos/fatihdonmezdev/FatihsMG4/releases`) and walks **every** entry, keeping the highest version rather than the first match. A
release is a candidate only if all of these hold: release is a candidate only if all of these hold:
| Requirement | Where it is enforced | What happens otherwise | | Requirement | Where it is enforced | What happens otherwise |
@@ -55,7 +60,7 @@ The version comes from the **asset filename**, not the git tag. The tag can stay
versionName "2.2.7" versionName "2.2.7"
``` ```
The unstable flavour appends its own suffix, so `2.2.7` becomes `2.2.7.0-unstable`. The unstable flavour appends its own suffix, so `2.2.7` becomes `2.2.7-unstable`.
Check what the installed build reports before picking a number: the app's About Check what the installed build reports before picking a number: the app's About
dialog shows it, and `isNewer` compares numerically segment by segment. dialog shows it, and `isNewer` compares numerically segment by segment.
@@ -79,24 +84,24 @@ The version comes from the **asset filename**, not the git tag. The tag can stay
"$BT/apksigner" sign \ "$BT/apksigner" sign \
--key "$KEYS/platform.pk8" \ --key "$KEYS/platform.pk8" \
--cert "$KEYS/platform.x509.pem" \ --cert "$KEYS/platform.x509.pem" \
--out FatihsMG4-unstable-2.2.7.apk \ --out NilsMG4-unstable-2.2.7.apk \
aligned.apk aligned.apk
rm aligned.apk rm aligned.apk
``` ```
The output filename **is** the version the updater reads. Name it The output filename **is** the version the updater reads. Name it
`FatihsMG4-unstable-<version>.apk`, then create its required integrity sidecar: `NilsMG4-unstable-<version>.apk` (`build-car` does steps 2 to 4 and names it so), then create its required integrity sidecar:
```bash ```bash
shasum -a 256 FatihsMG4-unstable-2.2.7.apk \ shasum -a 256 NilsMG4-unstable-2.2.7.apk \
> FatihsMG4-unstable-2.2.7.apk.sha256 > NilsMG4-unstable-2.2.7.apk.sha256
``` ```
4. **Verify the signer** before uploading. It must say `CN=Android`: 4. **Verify the signer** before uploading. It must say `CN=Android`:
```bash ```bash
"$BT/apksigner" verify --print-certs FatihsMG4-unstable-2.2.7.apk "$BT/apksigner" verify --print-certs NilsMG4-unstable-2.2.7.apk
``` ```
5. **Publish.** On github.com/fatihdonmezdev/FatihsMG4 → Releases → Draft a new release: 5. **Publish.** On github.com/fatihdonmezdev/FatihsMG4 → Releases → Draft a new release:
+3 -2
View File
@@ -82,8 +82,6 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does *
- [ ] **Telemetry queue survives restarts.** Unsent live samples are kept in memory only. - [ ] **Telemetry queue survives restarts.** Unsent live samples are kept in memory only.
- [ ] **Translate the rest.** The docs (`CHANGELOG.md`, `OTA.md`'s - [ ] **Translate the rest.** The docs (`CHANGELOG.md`, `OTA.md`'s
message table, comments in `mise.toml`/`app/build.gradle`) are still Turkish or French. message table, comments in `mise.toml`/`app/build.gradle`) are still Turkish or French.
- [ ] **Docs still use the old package ID.** `README.md`, `OTA.md`, `CHANGELOG.md`, `mise.toml` and
`docs/MG4_PLATFORM_INSTALL.md` refer to `com.evsuite.abrp(.unstable)` and `FatihsMG4-*.apk`.
- [ ] **Move hardcoded UI strings into `strings.xml`.** Many are inline in Java and layouts. - [ ] **Move hardcoded UI strings into `strings.xml`.** Many are inline in Java and layouts.
## Done ## Done
@@ -114,6 +112,9 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does *
INGEST_TOKEN) into git and pushed it. Commit amended and force-pushed; both values regenerated in INGEST_TOKEN) into git and pushed it. Commit amended and force-pushed; both values regenerated in
the now gitignored `k8s/secrets.yaml` (since moved to `k8s/secrets/secrets.yaml`, outside the now gitignored `k8s/secrets.yaml` (since moved to `k8s/secrets/secrets.yaml`, outside
`kubectl apply -f k8s/`). Filled-in secrets live only there from now on. `kubectl apply -f k8s/`). Filled-in secrets live only there from now on.
- 2026-10-18 — README rewritten for Nils' MG4. `OTA.md`, `mise.toml` and
`docs/MG4_PLATFORM_INSTALL.md` use the new package ID and `NilsMG4-*.apk` names; `OTA.md` notes
that updates are switched off. `CHANGELOG.md` keeps the old ID as upstream history.
- 2026-10-18 — App 2.8.2: full screen uses the whole display. The MG4 hid its bars but left a black - 2026-10-18 — App 2.8.2: full screen uses the whole display. The MG4 hid its bars but left a black
band where they were: LAYOUT_STABLE kept reporting the bars' insets and the fitsSystemWindows root band where they were: LAYOUT_STABLE kept reporting the bars' insets and the fitsSystemWindows root
padded for them. Both are off in full screen now. padded for them. Both are off in full screen now.
+5 -5
View File
@@ -57,15 +57,15 @@ later install says `No such file or directory`, re-push.
## Verifying the Install ## Verifying the Install
```bash ```bash
adb shell pm path com.evsuite.abrp.unstable adb shell pm path com.stinnesbeck.nilsmg4.unstable
# -> package:/data/app/com.evsuite.abrp.unstable-.../base.apk # -> package:/data/app/com.stinnesbeck.nilsmg4.unstable-.../base.apk
``` ```
To confirm the platform signature matches the system: To confirm the platform signature matches the system:
```bash ```bash
BUILD_TOOLS="$ANDROID_HOME/build-tools/36.0.0" BUILD_TOOLS="$ANDROID_HOME/build-tools/36.0.0"
adb pull "$(adb shell pm path com.evsuite.abrp.unstable | sed 's/package://')" /tmp/installed.apk adb pull "$(adb shell pm path com.stinnesbeck.nilsmg4.unstable | sed 's/package://')" /tmp/installed.apk
"$BUILD_TOOLS/apksigner" verify --print-certs /tmp/installed.apk "$BUILD_TOOLS/apksigner" verify --print-certs /tmp/installed.apk
# SHA-256 cert digest should match tools/platform.x509.pem # SHA-256 cert digest should match tools/platform.x509.pem
``` ```
@@ -73,7 +73,7 @@ adb pull "$(adb shell pm path com.evsuite.abrp.unstable | sed 's/package://')" /
## Uninstalling ## Uninstalling
```bash ```bash
adb uninstall com.evsuite.abrp.unstable adb uninstall com.stinnesbeck.nilsmg4.unstable
``` ```
Add `-k` to keep data/cache around (useful when re-installing to test without Add `-k` to keep data/cache around (useful when re-installing to test without
@@ -92,7 +92,7 @@ SDK="$HOME/Library/Android/sdk"
BT="$SDK/build-tools/36.0.0" BT="$SDK/build-tools/36.0.0"
IN=app/build/outputs/apk/unstable/debug/app-unstable-debug.apk IN=app/build/outputs/apk/unstable/debug/app-unstable-debug.apk
ALIGNED=app/build/outputs/apk/unstable/debug/app-unstable-debug-aligned.apk ALIGNED=app/build/outputs/apk/unstable/debug/app-unstable-debug-aligned.apk
OUT=FatihsMG4-unstable-platform.apk OUT=NilsMG4-unstable-platform.apk
"$BT/zipalign" -f 4 "$IN" "$ALIGNED" "$BT/zipalign" -f 4 "$IN" "$ALIGNED"
"$BT/apksigner" sign --key tools/platform.pk8 --cert tools/platform.x509.pem --out "$OUT" "$ALIGNED" "$BT/apksigner" sign --key tools/platform.pk8 --cert tools/platform.x509.pem --out "$OUT" "$ALIGNED"
"$BT/apksigner" verify --verbose "$OUT" "$BT/apksigner" verify --verbose "$OUT"
+1 -1
View File
@@ -216,6 +216,6 @@ fi
APK=$(ls -t app/build/outputs/apk/stable/debug/*.apk | head -1) APK=$(ls -t app/build/outputs/apk/stable/debug/*.apk | head -1)
echo "Installation de $APK" echo "Installation de $APK"
$ADB install -r -g "$APK" $ADB install -r -g "$APK"
$ADB shell am start -n "com.evsuite.abrp/com.evsuite.abrp.MainActivity" $ADB shell am start -n "com.stinnesbeck.nilsmg4/com.evsuite.abrp.MainActivity"
echo "Lancé. Logs : mise run logs" echo "Lancé. Logs : mise run logs"
''' '''