Files
Noxely/Makefile
T
tuxgyver 992fe88cc4 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.
2026-09-11 19:55:08 +02:00

123 lines
4.4 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
.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 ""