- Package HA : 8 scripts d'effets (calmes et « boum ») et une automatisation webhook local_only avec liste blanche stricte - Page web autonome (HTML/CSS/JS ES5) tenant sur un écran de lecteur MP3 - Mini APK Android (WebView verrouillée) compilé sans Gradle - Modèles + config.local.env non versionné : aucune valeur réelle (IP, ID du webhook, entité, prénom) dans le dépôt ; deploy.sh génère et déploie, android/build.sh injecte la configuration Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
58 lines
2.1 KiB
Bash
Executable File
58 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Compile l'APK « Ma lumière » sans Gradle (aapt2 + javac + d8 + apksigner).
|
|
# Les valeurs réelles (IP de HA, identifiant de l'appli) viennent de
|
|
# ../config.local.env (non versionné, voir ../config.example.env).
|
|
# Résultat : build/ma-lumiere.apk
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
[ -f ../config.local.env ] || { echo "../config.local.env manquant (copier config.example.env)" >&2; exit 1; }
|
|
set -a; . ../config.local.env; set +a
|
|
|
|
SDK="${ANDROID_HOME:-/opt/android-sdk}"
|
|
BT="$SDK/build-tools/30.0.2"
|
|
JAR="$SDK/platforms/android-25/android.jar"
|
|
KEYSTORE="$HOME/.android/debug.keystore"
|
|
|
|
rm -rf build && mkdir -p build/res build/gen/app/lumiere build/classes build/dex
|
|
|
|
echo "== valeurs locales ($APP_ID -> http://$HA_IP:$HA_PORT/)"
|
|
cp -r res build/res-src
|
|
sed -i "s/__HA_IP__/$HA_IP/g" build/res-src/xml/network_security_config.xml
|
|
if grep -rq "__[A-Z_]*__" build/res-src; then echo "marqueurs non remplacés dans res/" >&2; exit 1; fi
|
|
cat > build/gen/app/lumiere/Config.java <<EOF
|
|
package app.lumiere;
|
|
|
|
/** Généré par build.sh depuis config.local.env : ne pas modifier. */
|
|
final class Config {
|
|
static final String ORIGINE = "http://$HA_IP:$HA_PORT/";
|
|
private Config() {}
|
|
}
|
|
EOF
|
|
|
|
echo "== ressources"
|
|
"$BT/aapt2" compile --dir build/res-src -o build/res/res.zip
|
|
"$BT/aapt2" link -o build/base.apk -I "$JAR" \
|
|
--manifest AndroidManifest.xml \
|
|
--rename-manifest-package "$APP_ID" \
|
|
--min-sdk-version 24 --target-sdk-version 33 \
|
|
--java build/gen build/res/res.zip
|
|
|
|
echo "== java"
|
|
javac -source 1.8 -target 1.8 -encoding UTF-8 -Xlint:-options \
|
|
-bootclasspath "$JAR" -d build/classes \
|
|
$(find src build/gen -name '*.java')
|
|
|
|
echo "== dex"
|
|
"$BT/d8" --min-api 24 --lib "$JAR" --output build/dex $(find build/classes -name '*.class')
|
|
cp build/base.apk build/unsigned.apk
|
|
(cd build/dex && zip -q -j ../unsigned.apk classes.dex)
|
|
|
|
echo "== alignement et signature (clé de debug)"
|
|
"$BT/zipalign" -f -p 4 build/unsigned.apk build/aligned.apk
|
|
"$BT/apksigner" sign --ks "$KEYSTORE" --ks-pass pass:android --key-pass pass:android \
|
|
--out build/ma-lumiere.apk build/aligned.apk
|
|
"$BT/apksigner" verify build/ma-lumiere.apk
|
|
|
|
ls -l build/ma-lumiere.apk
|