# App Store Publicatie — Sylvia Touch Relay ## Licentie-overzicht Dependencies | Dependency | Versie | Licentie | Copyleft? | FOSS? | |---|---|---|---|---| | `io.github.dkaukov:esp32-flash-lib` | 1.1.17 | **GPL-3.0** | Ja (strong) | Ja | | `com.eclipsesource.minimal-json:minimal-json` | 0.9.5 | MIT | Nee | Ja | | `org.slf4j:slf4j-nop` | 2.0.16 | MIT | Nee | Ja | | `androidx.security:security-crypto` | 1.1.0-alpha06 | Apache 2.0 | Nee | Ja | | `androidx.core:core-ktx` | 1.12.0 | Apache 2.0 | Nee | Ja | | `androidx.appcompat:appcompat` | 1.6.1 | Apache 2.0 | Nee | Ja | ### GPL-3.0 Copyleft Implicatie `esp32-flash-lib` is GPL-3.0. Een app die ertoe linkt (compile-time dependency) moet zelf ook GPL-3.0 (of compatibele licentie) zijn. Dit betekent: - App **moet** onder GPL-3.0 worden uitgebracht - Source code moet beschikbaar blijven (GitHub volstaat) - Geen proprietary SDKs linken (niet van toepassing) - Voor andere stores (Amazon, Samsung) is dit geen belemmering ### Actie: GPL-3.0 toepassen ✅ Voltooid 1. ✅ `LICENSE` file toevoegen in repo root (volledige GPL-3.0 tekst) 2. ✅ Source file headers toevoegen: `// SPDX-License-Identifier: GPL-3.0-or-later` in alle 6 Kotlin bestanden 3. ✅ `README.md` licentiesectie bijwerken --- ## Google Play Store ### Vereisten (2026) | Vereiste | Status | Opmerking | |---|---|---| | Ontwikkelaarsaccount | ❌ Nog aanmaken | $25 eenmalig | | Overheids-ID verificatie | ❌ Nog doen | Paspoort/rijbewijs + selfie | | AAB formaat (geen APK) | ❌ Release build nodig | Nu alleen debug | | Release signing key | ❌ Aanmaken | `keytool` of Play App Signing | | targetSdk ≥ 35 | ❌ Nu 34 | Verplicht; ≥ 36 vanaf 31 aug 2026 | | App icoon (mipmap) | ❌ Ontbreekt | Geen mipmap resources aanwezig | | Privacy Policy URL | ❌ Nodig | Website of GitHub Pages | | Data Safety formulier | ❌ Invullen | In Play Console | | IARC content rating | ❌ Invullen | Vragenlijst in Play Console | | App signing | ⚠️ Keuze | Play App Signing (aanbevolen) of eigen key | | `minifyEnabled true` | ⚠️ Aanbevolen | Proguard/R8 rules ontbreken nog | | `ACCESS_FINE_LOCATION` | ⚠️ Mogelijk overbodig | Sinds Android 12 niet meer nodig voor BLE scan | ### Closed Testing Verplichting Nieuwe persoonlijke accounts moeten **closed testing** doorlopen: - Minimaal **12 testers** - Minimaal **14 opeenvolgende dagen** testen - Testers moeten de app actief gebruiken - Na goedkeuring: pas dan kan de app publiek ### Publicatie Stappenplan 1. Ontwikkelaarsaccount aanmaken + ID verificatie 2. `targetSdk` upgraden naar 35 (codereview #7.2) 3. App icoon ontwerpen + mipmap resources toevoegen 4. Release build configureren (signing, minify, proguard) 5. Privacy Policy pagina maken (GitHub Pages of statische site) 6. AAB build maken: `./gradlew bundleRelease` 7. Closed testing opzetten met 12 testers 8. Na 14 dagen: productie-release indienen --- ## Alternatieve App Stores ### Vergelijking | Store | Kosten | Review tijd | GMS nodig? | FOSS verplicht? | Relevante beperking | |---|---|---|---|---|---| | **Samsung Galaxy Store** | Gratis | Weken | Nee | Nee | 16KB page size verplicht voor native libs | | **Amazon Appstore** | $0 | ~1 dag | Nee | Nee | Laagste drempel, grote userbase (Fire TV/tablets) | | **F-Droid** | $0 | 2-3 weken | Nee | **Ja** | Bouwt zelf vanuit source; hele codebase + deps moeten FOSS | | **Huawei AppGallery** | Gratis | Dagen | Nee | Nee | ID verificatie verplicht | | **Aptoide** | $0 | Uren | Nee | Nee | Minimale review, minder vertrouwd | ### F-Droid Specifiek - **Compatibel**: alle deps zijn FOSS (GPL-3.0, MIT, Apache 2.0) - **Vereist**: app moet open-source licentie hebben → GPL-3.0 (verplicht door esp32-flash-lib copyleft) - **Proces**: F-Droid bouwt de app zelf vanuit source (geen APK/AAB upload) - **Aanvraag**: merge request in [fdroiddata](https://gitlab.com/fdroid/fdroiddata) repo met build recipe - **Voordelen**: geen ontwikkelaarskosten, geen account nodig, vertrouwd door FOSS-gemeenschap - **Nadelen**: kleine userbase, geen automatische updates buiten F-Droid client ### Amazon Appstore Specifiek - **Laagste drempel**: gratis, snelle review (~1 dag), geen ID verificatie - **Bereik**: Fire TV, Fire tablets, Kindle — niche maar relevant voor IoT-apps - **Formaat**: APK of AAB - **Aanmelden**: [developer.amazon.com](https://developer.amazon.com) ### Samsung Galaxy Store Specifiek - **Bereik**: alleen Samsung Galaxy toestellen (groot marktaandeel, maar exclusief) - **Niet-Samsung**: Galaxy Store kan officieel alleen op Samsung toestellen; sideloading APK op andere merken werkt onbetrouwbaar (ROM-afhankelijkheden, craches, geen updates) - **16KB page size**: als de app native libraries bevat, moeten deze met 16KB page alignment worden gebuild. Onze app heeft geen native libs, dus geen probleem. - **Aanmelden**: [seller.samsungapps.com](https://seller.samsungapps.com) ### Aptoide - **Niet zelf-hosted**: jouw store draait binnen Aptoide's infrastructuur, niet op eigen server - **Gebruikers moeten eerst Aptoide client installeren** voordat ze jouw store kunnen vinden - **Data breach**: 2020 — 20M gebruikersgegevens gelekt - **Review**: minimaal (uren), maar minder vertrouwd bij gebruikers - **Geschikt voor**: grote distributie, niet voor 1-2 apps → overkill voor ons --- ## Eigen App Store (Self-Hosted) Technisch is een eigen app store simpel: APK hosten op een webserver, gebruiker downloadt direct. Android staat installatie uit onbekende bronnen toe. Er zijn geen Google-licenties of -toestemmingen nodig om een app store te runnen. ### Praktische Overwegingen - Gebruiker moet "Installatie uit onbekende bronnen" inschakelen; Google Play Protect waarschuwt - Geen automatische updates tenzij je zelf een update-check in de app bouwt - **Android Developer Verificatie (vanaf 2027 globaal)**: Google vereist identity verification + package name registratie via Android Developer Console voor installatie op gecertificeerde apparaten. Dit geldt voor óók sideloading. De verificatie is gratis (geen $25 Play-account nodig), maar vereist legitimatiebewijs. ### Self-Hosted Oplossingen Vergelijking | Aspect | Selfdroid | Aptoide | Simpele webpagina | |---|---|---|---| | **Zelf-hosted** | ✅ Ja | ❌ Nee (Aptoide's ecosysteem) | ✅ Ja | | **Installatie voor gebruiker** | URL in browser → download APK | Eerst Aptoide client, dan store zoeken | URL → download APK | | **Licentie** | BSD 3-clause | Propriëtair | NVT | | **Setup** | Python/Flask + nginx + uWSGI | Account op aptoide.com | Statische HTML | | **Admin paneel** | ✅ Met wachtwoordbeveiliging | Via Aptoide dashboard | Handmatig upload | | **APK metadata extractie** | ✅ Automatisch (naam, versie, icoon) | ✅ Automatisch | Nee | | **Android companion app** | Gepland, nooit gebouwd | ✅ Aptoide client | Nee | | **Data breach history** | Nee | Ja (2020, 20M gebruikers) | Nee | | **Geschikt voor 1 app** | ✅ Perfect | ❌ Overkill | ✅ Simpelst | ### Aanrader: Selfdroid **Selfdroid** ([vitlabuda/selfdroid-web-app](https://github.com/vitlabuda/selfdroid-web-app)) — self-hosted Android app store, Python/Flask, BSD-licentie. Voordelen: - Admin uploadt APK, metadata automatisch geëxtraheerd - Gebruikers openen URL op telefoon → downloaden APK direct vanuit browser - Geen extra app installatie nodig voor gebruikers - Lichtgewicht: Python 3.7+, Flask, nginx + uWSGI - Kan op bestaande server draaien - BSD-licentie compatibel met onze GPL-3.0 app Deploy stappen: 1. Clone repo, configureer `Settings.py` (admin wachtwoord) 2. `./prepare.sh` voor Python venv + dependencies 3. nginx vhost + uWSGI config (meegeleverd in repo) 4. Upload APK via admin paneel 5. Deel URL met gebruikers Alternatief voor maximale eenvoud: APK op GitHub Releases hosten + simpele downloadpagina (GitHub Pages). Geen server nodig, maar geen auto-metadata of admin paneel. --- ## Multi-Channel Distributiestrategie We publiceren parallel via meerdere kanalen. Geen exclusiviteit — Android staat meerdere distributiekanalen naast elkaar toe. | Kanaal | Bereik | Kosten | Beheer | Prioriteit | |---|---|---|---|---| | **F-Droid** | FOSS-gebruikers wereldwijd | Gratis | MR in fdroiddata, F-Droid bouwt zelf | 1e | | **Samsung Galaxy Store** | Samsung-gebruikers | Gratis | Upload AAB, Samsung review | 2e | | **Eigen store (Selfdroid)** | Iedereen met directe link | Hosting alleen | APK upload via admin paneel | 3e | | **Google Play Store** | Grootste bereik | $25 + ID verificatie | Veel vereisten, closed testing | 4e | ### Volgorde 1. **F-Droid** — geen kosten, F-Droid bouwt zelf vanuit source, vertrouwd kanaal 2. **Samsung Galaxy Store** — gratis, bereikt Samsung-gebruikers die geen F-Droid hebben 3. **Selfdroid (eigen store)** — APK distributie voor iedereen buiten F-Droid/Samsung, geen goedkeuringsproces 4. **Google Play Store** — grootste bereik maar veel vereisten (account, closed testing, targetSdk 35) ### Benodigde stappen vóór publicatie (alle kanalen) | Stap | F-Droid | Galaxy Store | Eigen store | Google Play | |---|---|---|---|---| | GPL-3.0 licentie | ✅ Gedaan | — | — | — | | Release build (signed) | F-Droid bouwt zelf | ✅ Nodig | ✅ Nodig | ✅ Nodig (AAB) | | App icoon (mipmap) | ✅ Nodig | ✅ Nodig | — | ✅ Nodig | | targetSdk ≥ 35 | — | — | — | ✅ Verplicht | | Privacy Policy URL | — | — | — | ✅ Verplicht | | Developer verificatie | — | — | 2027 | ✅ Automatisch | | Proguard rules | Aanbevolen | Aanbevolen | — | Aanbevolen | --- ## Openstaande Codereview Punten die Publicatie Blokkeren | # | Prioriteit | Bevinding | Relevantie voor publicatie | |---|---|---|---| | 7.2 | LAAG | compileSdk/targetSdk → 35 | **Blokkeert Google Play** | | 4.5 | LAAG | Proguard rules | **Aanbevolen** voor release build | | 6.2 | LAAG | Dark mode | Gebruikerservaring | | — | — | App icoon (mipmap) | **Verplicht** voor alle stores | | — | — | Release build signing | **Verplicht** voor alle stores | | — | — | Privacy Policy URL | **Verplicht** voor Google Play |