132 lines
5.9 KiB
Text
132 lines
5.9 KiB
Text
===============================================================
|
|
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.4-20260502-pruebas.apk <- APK actual (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"
|