Le nom change, et pas seulement à l'écran : identifiant d'application, paquet Kotlin, dépôt et dossier d'enregistrements suivent, pour qu'il ne subsiste pas deux noms selon l'endroit où l'on regarde. Android traite le nouvel identifiant comme une application distincte : une installation en 1.5.0 ne se mettra pas à jour seule et devra être remplacée. C'est le prix d'un renommage complet, assumé plutôt que contourné. Les enregistrements déjà faits ne sont pas perdus, étant dans le stockage partagé, et le scan continue d'écarter l'ancien dossier pour ne pas les compter deux fois. L'icône fournie est détourée de son fond blanc avant d'être déclinée : posée telle quelle, le masque du système aurait redécoupé un badge qui l'est déjà et laissé du blanc sur les bords. La couleur de fond est échantillonnée dans l'image, non choisie au jugé. La page À propos dit enfin ce que l'application fait, ce qu'elle garantit, avec quoi elle est construite et qui en répond. Sa version vient du manifeste et son journal du CHANGELOG du dépôt : ni l'un ni l'autre ne peut dériver. La licence n'étant pas déclarée, la pastille le signale en rouge au lieu d'en inventer une. Le .gitignore filtre désormais *.apk, et non un motif au nom du projet : c'est ce motif nommé qui, au renommage, avait laissé entrer 95 Mo d'anciens APK.
123 lines
4.4 KiB
Makefile
123 lines
4.4 KiB
Makefile
.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 ""
|