85f62a8d66
- Valida BITEPLAN_KEYSTORE_PASS prima della build e stampa istruzioni chiare - Passa --ks-pass a apksigner tramite env var (stdin era chiuso nel container) - Aggiunge rm -f su biteplan-aligned.apk prima di zipalign per evitare errori su run consecutive - Documenta export BITEPLAN_KEYSTORE_PASS nel docker/README.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
93 lines
3.0 KiB
Bash
Executable File
93 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
|
RELEASE=false
|
|
|
|
for arg in "$@"; do
|
|
[[ "$arg" == "--release" ]] && RELEASE=true
|
|
done
|
|
|
|
echo "→ Build immagine biteplan-build..."
|
|
docker build -t biteplan-build "${SCRIPT_DIR}"
|
|
|
|
if [[ ! -d "${PROJECT_ROOT}/android" ]]; then
|
|
echo "→ Cartella android/ non trovata, eseguo flutter create..."
|
|
docker run --rm \
|
|
-v "${PROJECT_ROOT}:/workspace" \
|
|
biteplan-build \
|
|
bash -c "
|
|
cd /workspace &&
|
|
flutter create --project-name biteplan --org com.biteplan --platforms=android . &&
|
|
MANIFEST=android/app/src/main/AndroidManifest.xml &&
|
|
grep -q 'CAMERA' \"\$MANIFEST\" ||
|
|
sed -i 's|<application|<uses-permission android:name=\"android.permission.CAMERA\" />\n <application|' \"\$MANIFEST\"
|
|
"
|
|
fi
|
|
|
|
mkdir -p "${PROJECT_ROOT}/dist"
|
|
|
|
if [[ "$RELEASE" == "true" ]]; then
|
|
if [[ -z "${BITEPLAN_KEYSTORE_PASS}" ]]; then
|
|
echo "ERRORE: variabile BITEPLAN_KEYSTORE_PASS non impostata"
|
|
echo "Usa: export BITEPLAN_KEYSTORE_PASS=tuapassword"
|
|
exit 1
|
|
fi
|
|
|
|
KEYSTORE="${SCRIPT_DIR}/../biteplan.jks"
|
|
if [[ ! -f "$KEYSTORE" ]]; then
|
|
echo "ERRORE: keystore non trovato in docker/biteplan.jks"
|
|
echo "Generalo con:"
|
|
echo " keytool -genkey -v -keystore docker/biteplan.jks -alias biteplan -keyalg RSA -keysize 2048 -validity 10000"
|
|
exit 1
|
|
fi
|
|
|
|
echo "→ Building release APK..."
|
|
docker run --rm \
|
|
-v "${PROJECT_ROOT}:/workspace" \
|
|
-v "gradle-cache:/root/.gradle" \
|
|
biteplan-build \
|
|
bash -c "cd /workspace && flutter pub get --enforce-lockfile && flutter pub run flutter_launcher_icons && flutter build apk --release"
|
|
|
|
echo "→ Zipalign..."
|
|
rm -f "${PROJECT_ROOT}/dist/biteplan-aligned.apk"
|
|
docker run --rm \
|
|
-v "${PROJECT_ROOT}:/workspace" \
|
|
biteplan-build \
|
|
bash -c "zipalign -v -p 4 \
|
|
/workspace/build/app/outputs/flutter-apk/app-release.apk \
|
|
/workspace/dist/biteplan-aligned.apk"
|
|
|
|
echo "→ Firma APK..."
|
|
docker run --rm \
|
|
-v "${PROJECT_ROOT}:/workspace" \
|
|
-v "$(realpath "${KEYSTORE%/*}"):/keystore:ro" \
|
|
-e BITEPLAN_KEYSTORE_PASS \
|
|
biteplan-build \
|
|
bash -c "apksigner sign \
|
|
--ks /keystore/biteplan.jks \
|
|
--ks-pass \"pass:\${BITEPLAN_KEYSTORE_PASS}\" \
|
|
--out /workspace/dist/biteplan-release.apk \
|
|
/workspace/dist/biteplan-aligned.apk && \
|
|
rm -f /workspace/dist/biteplan-aligned.apk && \
|
|
apksigner verify --verbose /workspace/dist/biteplan-release.apk"
|
|
|
|
echo ""
|
|
echo "✓ Release APK: dist/biteplan-release.apk"
|
|
|
|
else
|
|
echo "→ Building debug APK..."
|
|
docker run --rm \
|
|
-v "${PROJECT_ROOT}:/workspace" \
|
|
-v "gradle-cache:/root/.gradle" \
|
|
biteplan-build \
|
|
bash -c "cd /workspace && flutter pub get --enforce-lockfile && flutter pub run flutter_launcher_icons && flutter build apk --debug"
|
|
|
|
cp "${PROJECT_ROOT}/build/app/outputs/flutter-apk/app-debug.apk" \
|
|
"${PROJECT_ROOT}/dist/biteplan-debug.apk"
|
|
|
|
echo ""
|
|
echo "✓ Debug APK: dist/biteplan-debug.apk"
|
|
fi
|