===============================================================
  CAMBIO: REEMPAQUETADO APK PARA ANDROID
  Fecha: 2026-05-01
===============================================================

--------------------------------------------------------------
OBJETIVO
--------------------------------------------------------------
Distribuir los cambios CSS/JS del proyecto Node.js como APK
instalable en Android (probado: Pixel 6 GrapheneOS).

--------------------------------------------------------------
ARCHIVO CLAVE
--------------------------------------------------------------
  /home/sito/oasis-v0.7.5-20260504-pruebas.apk  <- APK actual (132 MB, v0.7.5)
  /home/sito/oasis-v0.7.4-20260502-pruebas.apk  <- APK anterior (132 MB, v0.7.4)
  /home/sito/oasis-v0.6.8-pruebas.apk  <- APK anterior (106 MB, v0.6.8)
  /home/sito/oasis-v0.6.8.apk          <- APK original sin modificar (55 MB)
  /home/sito/oasis-release-key.jks      <- keystore de firma
    alias: oasis | password: oasis123

--------------------------------------------------------------
DESGLOSE DE PESO — POR QUE PESA 132 MB
--------------------------------------------------------------
  Parte                        Tamaño    Notas
  ------------------------------------------------
  APK wrapper Android            ~17 MB  libnative-lib.so, libnode.so,
                                         libc++_shared.so, resources.arsc,
                                         AndroidManifest, DEX
  node_modules (SSB stack)       ~57 MB  ssb-server (49M), highlight.js,
                                         emoji-named-characters, lodash,
                                         moment, jsdom, etc.
  src/maps/tiles (mapas offline) ~42 MB  5461 archivos PNG, zoom 0-8
                                         tiles del mapa mundial offline
  src/client (CSS, JS, imagenes)  ~3.6 MB mobile.css, style.css, QR, icons
  src/views (16 vistas)           ~1.1 MB HTML/hyperaxe views
  src/games (16 juegos)           ~0.9 MB JS puro, sin assets pesados
  src/models + backend + configs  ~1.0 MB logica de negocio
  src/AI                          ~0.1 MB ai_service.mjs, buildAIContext.js
  ------------------------------------------------
  TOTAL BUNDLE                   ~113 MB (STORED, sin comprimir)
  TOTAL APK FIRMADA              ~132 MB

  Referencia: APK original = 55 MB (sin mapas, sin modulos nuevos)
  Los 77 MB extra = mapas offline (42 MB) + nuevo codigo (35 MB)

  NOTA: src/maps/maps/ era un duplicado accidental de src/maps/tiles/
  que ocupaba 42 MB extra — eliminado en commit 56f091a.

--------------------------------------------------------------
METODO CORRECTO (IMPORTANTE)
--------------------------------------------------------------
NO usar "zip -r" para reempaquetar el APK entero — destruye
la compresión de resources.arsc (debe ser STORED) y cambia
la compresión de otros archivos críticos.

El método correcto es modificar SOLO el archivo que cambia:

  1. Copiar el APK original como base:
       cp oasis-v0.6.8.apk /tmp/oasis-temp.apk

  2. Quitar la firma original (META-INF):
       zip -d /tmp/oasis-temp.apk "META-INF/*"

  3. Crear el nuevo bundle Node.js:
       cd /home/sito/COFRE/CODERS/oasis_mobile/nodejs-project
       zip -r /tmp/nodejs-project-new.zip nodejs-project/

  4. Reemplazar SOLO assets/nodejs-project.zip con -0 (stored):
       cd /tmp/apk_repack   <- directorio con el APK extraido
       zip -0 /tmp/oasis-temp.apk assets/nodejs-project.zip

  5. Alinear:
       ~/Android/Sdk/build-tools/35.0.1/zipalign -v -p 4 \
         /tmp/oasis-temp.apk /tmp/oasis-aligned.apk

  6. Firmar (nota: --ks-key-alias no --ks-alias):
       ~/Android/Sdk/build-tools/35.0.1/apksigner sign \
         --ks /home/sito/oasis-release-key.jks \
         --ks-pass pass:oasis123 \
         --key-pass pass:oasis123 \
         --ks-key-alias oasis \
         /tmp/oasis-aligned.apk
       cp /tmp/oasis-aligned.apk /home/sito/oasis-v0.7.4-pruebas.apk

--------------------------------------------------------------
POR QUE FALLA SI SE REEMPAQUETA MAL
--------------------------------------------------------------
  - resources.arsc debe ser STORED (sin comprimir) y alineado
    en 4 bytes — Android 7+ lo exige. Si se comprime: "App not
    installed".
  - Las librerias .so en el APK original son DEFLATED (no STORED).
    Si se cambia su compresion tambien puede fallar.
  - La solucion: no tocar lo que no hace falta. Solo el .zip.

--------------------------------------------------------------
ESTRUCTURA CORRECTA (verificada)
--------------------------------------------------------------
  STORED assets/dexopt/baseline.prof
  STORED assets/dexopt/baseline.profm
  DEFLAT classes.dex
  DEFLAT lib/arm64-v8a/libc++_shared.so
  DEFLAT lib/arm64-v8a/libnative-lib.so
  DEFLAT lib/arm64-v8a/libnode.so
  STORED assets/nodejs-project.zip    <- nuestro bundle modificado
  STORED resources.arsc               <- CRITICO: debe ser STORED

--------------------------------------------------------------
INSTALACION EN ANDROID
--------------------------------------------------------------
  1. Desinstalar la version original de Oasis primero
     (firma distinta -> Android rechaza la instalacion)
  2. Pasar el APK al dispositivo (Telegram Guardados, ADB, MTP)
  3. Instalar desde el gestor de archivos
  4. En GrapheneOS: permitir "Instalar apps desconocidas" para
     el gestor de archivos la primera vez

--------------------------------------------------------------
VERIFICAR APK ANTES DE DISTRIBUIR
--------------------------------------------------------------
  python3 -c "
  import zipfile
  with zipfile.ZipFile('oasis-v0.7.4-pruebas.apk') as z:
      for i in z.infolist():
          if i.filename in ['resources.arsc'] or i.filename.endswith('.so'):
              t = 'STORED' if i.compress_type == 0 else 'DEFLAT'
              print(t, i.filename)
  "
  -> resources.arsc debe ser STORED
  -> .so deben ser DEFLAT (como en el original)

  ~/Android/Sdk/build-tools/35.0.1/apksigner verify --verbose oasis-v0.7.4-pruebas.apk
  -> debe decir "Verifies"
