merge: make the APK resource guard trustworthy
This commit is contained in:
@@ -145,24 +145,76 @@ jobs:
|
||||
# entre el 31-07 (commit 2540556) y el 07-08 sin que nada lo detectara.
|
||||
#
|
||||
# Anadir un drawable nuevo referenciado por nombre => anadirlo aqui.
|
||||
# Guardian de recursos: el APK debe contener los drawables que el codigo
|
||||
# resuelve POR NOMBRE en runtime (getResources().getIdentifier).
|
||||
#
|
||||
# Un nombre que no resuelve devuelve id 0, y eso no falla la
|
||||
# compilacion: falla en el coche. PlaybackStateCompat.CustomAction
|
||||
# .Builder lanza con icono 0, ese throw aborta AudioService.setState
|
||||
# antes de activar la sesion de medios, y Android Auto se queda con la
|
||||
# interfaz congelada. Paso exactamente eso desde el 31-07 (commit
|
||||
# 2540556) sin que nada lo detectara.
|
||||
#
|
||||
# La primera version de este paso daba FALSOS POSITIVOS: no comprobaba
|
||||
# que el APK existiera ni que unzip estuviera disponible, asi que
|
||||
# cualquier fallo de la tuberia se reportaba como "faltan todos los
|
||||
# recursos". Un guardian que miente es peor que no tener guardian:
|
||||
# manda a buscar fantasmas. De ahi que ahora verifique primero sus
|
||||
# propias herramientas y vuelque el inventario real antes de juzgar.
|
||||
#
|
||||
# Anadir un drawable nuevo referenciado por nombre => anadirlo aqui.
|
||||
- name: Verificar recursos criticos en el APK
|
||||
run: |
|
||||
set -u
|
||||
APK=build/app/outputs/flutter-apk/app-release.apk
|
||||
|
||||
if [ ! -f "$APK" ]; then
|
||||
echo "El APK no esta donde se esperaba: $APK"
|
||||
echo "Contenido de build/app/outputs:"
|
||||
find build/app/outputs -name '*.apk' 2>/dev/null || echo " (nada)"
|
||||
exit 1
|
||||
fi
|
||||
echo "APK: $APK ($(wc -c < "$APK") bytes)"
|
||||
|
||||
if command -v unzip >/dev/null 2>&1; then
|
||||
LISTADO=$(unzip -Z1 "$APK")
|
||||
elif command -v python3 >/dev/null 2>&1; then
|
||||
LISTADO=$(python3 - "$APK" <<'PYZIP'
|
||||
import zipfile, sys
|
||||
for nombre in zipfile.ZipFile(sys.argv[1]).namelist():
|
||||
print(nombre)
|
||||
PYZIP
|
||||
)
|
||||
else
|
||||
echo "Ni unzip ni python3 disponibles: no se puede inspeccionar el APK."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$LISTADO" ]; then
|
||||
echo "El listado del APK salio vacio; la inspeccion no es fiable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Drawables en el APK:"
|
||||
echo "$LISTADO" | grep "^res/drawable" || echo " (ninguno)"
|
||||
|
||||
FALTAN=0
|
||||
for RECURSO in ic_auto_eq_on ic_auto_eq_off ic_stat_pluriwave; do
|
||||
if unzip -l "$APK" | grep -q "res/drawable/$RECURSO.xml"; then
|
||||
echo "OK res/drawable/$RECURSO.xml"
|
||||
if echo "$LISTADO" | grep -qx "res/drawable/$RECURSO.xml"; then
|
||||
echo "OK $RECURSO"
|
||||
else
|
||||
echo "FALTA res/drawable/$RECURSO.xml"
|
||||
FALTAN=1
|
||||
echo "FALTA $RECURSO"
|
||||
FALTAN=$((FALTAN + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$FALTAN" -ne 0 ]; then
|
||||
echo ""
|
||||
echo "Hay drawables resueltos por nombre que NO estan en el APK."
|
||||
echo "$FALTAN drawable(s) resueltos por nombre NO estan en el APK."
|
||||
echo "En runtime resolveran a id 0 y tumbaran la sesion de medios."
|
||||
exit 1
|
||||
fi
|
||||
echo "Todos los recursos criticos viajan en el APK."
|
||||
|
||||
- name: Build AAB release
|
||||
run: flutter build appbundle --release
|
||||
|
||||
Reference in New Issue
Block a user