merge: resource guard inspects the resource table and self-checks
This commit is contained in:
@@ -163,14 +163,34 @@ jobs:
|
|||||||
# propias herramientas y vuelque el inventario real antes de juzgar.
|
# propias herramientas y vuelque el inventario real antes de juzgar.
|
||||||
#
|
#
|
||||||
# Anadir un drawable nuevo referenciado por nombre => anadirlo aqui.
|
# 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. 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 deteccion.
|
||||||
|
#
|
||||||
|
# Se inspecciona resources.arsc, NO las rutas del zip: el APK release
|
||||||
|
# acorta/renombra las rutas de recursos (una version anterior de este
|
||||||
|
# paso listo "ningun drawable" en un APK de 105MB, que es imposible).
|
||||||
|
# Los NOMBRES de recurso siguen en la tabla pase lo que pase.
|
||||||
|
#
|
||||||
|
# El centinela existe porque este guardian ya mintio una vez: al no
|
||||||
|
# validar su propio metodo, reporto como ausente hasta un recurso que
|
||||||
|
# estaba verificado presente. Si el centinela no aparece, la inspeccion
|
||||||
|
# no es fiable y NO tenemos derecho a declarar nada ausente.
|
||||||
|
#
|
||||||
|
# Anadir un drawable nuevo referenciado por nombre => anadirlo aqui.
|
||||||
- name: Verificar recursos criticos en el APK
|
- name: Verificar recursos criticos en el APK
|
||||||
run: |
|
run: |
|
||||||
set -u
|
set -u
|
||||||
APK=build/app/outputs/flutter-apk/app-release.apk
|
APK=build/app/outputs/flutter-apk/app-release.apk
|
||||||
|
CENTINELA=station_art_nova
|
||||||
|
|
||||||
if [ ! -f "$APK" ]; then
|
if [ ! -f "$APK" ]; then
|
||||||
echo "El APK no esta donde se esperaba: $APK"
|
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)"
|
find build/app/outputs -name '*.apk' 2>/dev/null || echo " (nada)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -180,19 +200,25 @@ jobs:
|
|||||||
echo "unzip no esta disponible: no se puede inspeccionar el APK."
|
echo "unzip no esta disponible: no se puede inspeccionar el APK."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
LISTADO=$(unzip -Z1 "$APK")
|
|
||||||
|
|
||||||
if [ -z "$LISTADO" ]; then
|
ARSC=$(mktemp)
|
||||||
echo "El listado del APK salio vacio; la inspeccion no es fiable."
|
unzip -p "$APK" resources.arsc > "$ARSC" 2>/dev/null || true
|
||||||
|
if [ ! -s "$ARSC" ]; then
|
||||||
|
echo "No se pudo extraer resources.arsc del APK."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
echo "resources.arsc: $(wc -c < "$ARSC") bytes"
|
||||||
|
|
||||||
echo "Drawables en el APK:"
|
if ! grep -a -q "$CENTINELA" "$ARSC"; then
|
||||||
echo "$LISTADO" | grep "^res/drawable" || echo " (ninguno)"
|
echo "El centinela '$CENTINELA' no aparece en la tabla de recursos."
|
||||||
|
echo "La inspeccion no es fiable; no se declara nada ausente."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Centinela '$CENTINELA' localizado: la inspeccion es fiable."
|
||||||
|
|
||||||
FALTAN=0
|
FALTAN=0
|
||||||
for RECURSO in ic_auto_eq_on ic_auto_eq_off ic_stat_pluriwave; do
|
for RECURSO in ic_auto_eq_on ic_auto_eq_off ic_stat_pluriwave; do
|
||||||
if echo "$LISTADO" | grep -qx "res/drawable/$RECURSO.xml"; then
|
if grep -a -q "$RECURSO" "$ARSC"; then
|
||||||
echo "OK $RECURSO"
|
echo "OK $RECURSO"
|
||||||
else
|
else
|
||||||
echo "FALTA $RECURSO"
|
echo "FALTA $RECURSO"
|
||||||
|
|||||||
Reference in New Issue
Block a user