diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index e08dbb6..aebdc2b 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -163,14 +163,34 @@ jobs: # propias herramientas y vuelque el inventario real antes de juzgar. # # 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 run: | set -u APK=build/app/outputs/flutter-apk/app-release.apk + CENTINELA=station_art_nova 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 @@ -180,19 +200,25 @@ jobs: echo "unzip no esta disponible: no se puede inspeccionar el APK." exit 1 fi - LISTADO=$(unzip -Z1 "$APK") - if [ -z "$LISTADO" ]; then - echo "El listado del APK salio vacio; la inspeccion no es fiable." + ARSC=$(mktemp) + 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 fi + echo "resources.arsc: $(wc -c < "$ARSC") bytes" - echo "Drawables en el APK:" - echo "$LISTADO" | grep "^res/drawable" || echo " (ninguno)" + if ! grep -a -q "$CENTINELA" "$ARSC"; then + 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 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" else echo "FALTA $RECURSO"