Première version : lecteur audio et vidéo hors connexion (1.0.0)

Cachette met des médias de côté pendant qu'il y a du réseau, pour les lire
quand il n'y en a plus.

- Lecture audio et vidéo en arrière-plan (Media3 MediaSessionService)
- Mise en cache explicite, reprise automatique après coupure (WorkManager)
- Sources : appareil (MediaStore), lien direct, flux RSS de podcast
- Catalogues libres de droits : Internet Archive et LibriVox
- Parcours d'une source avec sélection multiple et téléchargement en lot
- Interface Jetpack Compose Material 3, thèmes clair et sombre
- Makefile catégorisé, publication Gitea déléguée à BorisSkill

Le fichier VERSION est la source unique de la version : versionCode en est
déduit et la publication s'y réfère.
This commit is contained in:
tuxgyver committed 2026-09-11 19:55:08 +02:00
commit 992fe88cc4
59 files changed
+4619

No files matched your search

+122
View File
@@ -0,0 +1,122 @@
.DEFAULT_GOAL := help
# --- Outillage -------------------------------------------------------------
# Le SDK et adb sont rarement dans le PATH : on les retrouve sans les figer.
ANDROID_SDK ?= $(HOME)/Android/Sdk
ADB ?= $(shell command -v adb 2>/dev/null || echo $(ANDROID_SDK)/platform-tools/adb)
GRADLE := ./gradlew
VERSION := $(shell tr -d '[:space:]' < VERSION)
APPLICATION_ID := fr.tuxgyver.cachette
LAUNCH_ACTIVITY := $(APPLICATION_ID)/.MainActivity
DEBUG_APK := app/build/outputs/apk/debug/app-debug.apk
# Le nom de l'APK de release dépend de la signature (app-release.apk contre
# app-release-unsigned.apk) : on liste le répertoire au lieu de deviner.
RELEASE_DIR := app/build/outputs/apk/release
SIGNED_APK := $(RELEASE_DIR)/app-release.apk
OUTPUT_APK := Cachette-$(VERSION).apk
# --- Publication -----------------------------------------------------------
# Déléguée au script de BorisSkill, qui sait déjà tout faire : résolution du
# jeton ($GITEA_TOKEN, .gitea-token, ~/.config/gitea/token, ~/.git-credentials),
# déduction de l'hôte, du propriétaire et du dépôt depuis le remote 'origin',
# création et poussée du tag, extraction des notes depuis le CHANGELOG.
GITEA_RELEASE ?= $(HOME)/.claude/skills/BorisSkill/scripts/gitea_release.sh
##@ 🔨 Construction
.PHONY: build
build: ## Construit l'APK de debug
$(GRADLE) :app:assembleDebug
@echo "→ $(DEBUG_APK)"
.PHONY: release
release: ## Construit l'APK de release (signé si keystore.properties existe)
@test -f keystore.properties || echo "⚠️ keystore.properties absent : l'APK produit sera non signé"
$(GRADLE) :app:assembleRelease
@if [ -f $(SIGNED_APK) ]; then \
cp $(SIGNED_APK) $(OUTPUT_APK); \
echo "→ $(OUTPUT_APK)"; \
else \
ls -1 $(RELEASE_DIR)/*.apk 2>/dev/null | sed 's/^/→ /'; \
echo " (non signé : non publiable, voir keystore.properties)"; \
fi
.PHONY: apk
apk: ## Affiche le chemin et la taille des APK construits
@ls -lh $(DEBUG_APK) 2>/dev/null || echo "APK de debug : pas encore construit (make build)"
@ls -lh $(RELEASE_DIR)/*.apk 2>/dev/null || echo "APK de release : pas encore construit (make release)"
.PHONY: clean
clean: ## Supprime les artefacts de build
$(GRADLE) clean
##@ 🚀 Déploiement
.PHONY: install
install: ## Installe l'APK de debug sur l'appareil connecté
$(GRADLE) :app:installDebug
.PHONY: run
run: install ## Installe puis lance l'application
$(ADB) shell am start -n $(LAUNCH_ACTIVITY)
.PHONY: uninstall
uninstall: ## Désinstalle l'application de l'appareil connecté
$(ADB) uninstall $(APPLICATION_ID)
##@ 🧪 Qualité
.PHONY: lint
lint: ## Analyse Android Lint (rapport dans app/build/reports/lint-results-debug.html)
$(GRADLE) :app:lintDebug
##@ 🐞 Diagnostic
.PHONY: devices
devices: ## Liste les appareils et émulateurs connectés
$(ADB) devices -l
.PHONY: logcat
logcat: ## Suit les journaux de l'application (Ctrl+C pour arrêter)
$(ADB) logcat --pid=$$($(ADB) shell pidof $(APPLICATION_ID))
.PHONY: crash
crash: ## Affiche la dernière trace de plantage éventuelle
@$(ADB) logcat -d -v brief | grep -A 30 -E "FATAL EXCEPTION" | tail -40 || echo "Aucun plantage enregistré"
##@ 📤 Publication
.PHONY: publish
publish: _check-apk _check-release-script ## Publie l'APK signé en release Gitea (tag + notes + asset)
bash $(GITEA_RELEASE) --version $(VERSION) --asset $(OUTPUT_APK)
.PHONY: publish-dry
publish-dry: _check-apk _check-release-script ## Simule la publication sans rien envoyer
bash $(GITEA_RELEASE) --version $(VERSION) --asset $(OUTPUT_APK) --dry-run
.PHONY: deploy
deploy: release publish ## Construit l'APK signé puis le publie
.PHONY: _check-release-script
_check-release-script:
@test -f $(GITEA_RELEASE) || \
{ echo "❌ Script de publication introuvable : $(GITEA_RELEASE)"; \
echo " Surchargez le chemin : make publish GITEA_RELEASE=/chemin/gitea_release.sh"; exit 1; }
.PHONY: _check-apk
_check-apk:
@test -f $(OUTPUT_APK) || \
{ echo "❌ $(OUTPUT_APK) introuvable — lancez d'abord 'make release' (signature requise)."; exit 1; }
@test $(OUTPUT_APK) -nt VERSION || \
{ echo "❌ $(OUTPUT_APK) est plus ancien que VERSION — relancez 'make release'."; exit 1; }
##@ ℹ️ Aide
.PHONY: help
help: ## Affiche cette aide
@awk 'BEGIN {FS = ":.*?## "} \
/^[a-zA-Z0-9_.-]+:.*?##/ { printf " \033[36m%-20s\033[0m %s\n", $$1, $$2 } \
/^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) }' $(MAKEFILE_LIST)
@echo ""