=============================================================== 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"