.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 := Noxely-$(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 ""