From 18ed6a8e2e2d04dbd3214771862c85abb4df6920 Mon Sep 17 00:00:00 2001 From: SITO Date: Fri, 1 May 2026 18:01:50 +0200 Subject: [PATCH] fix: center quick-link pills in mobile header; add APK repack docs Co-Authored-By: Claude Sonnet 4.6 --- CONTEXT/00_INDICE.txt | 8 ++ CONTEXT/cambio_apk_repack.txt | 103 ++++++++++++++++++ .../src/client/assets/styles/mobile.css | 1 + 3 files changed, 112 insertions(+) create mode 100644 CONTEXT/cambio_apk_repack.txt diff --git a/CONTEXT/00_INDICE.txt b/CONTEXT/00_INDICE.txt index f45d446d..640d74f8 100644 --- a/CONTEXT/00_INDICE.txt +++ b/CONTEXT/00_INDICE.txt @@ -66,6 +66,14 @@ FICHEROS DE CAMBIOS (documentan lo que se modifico y por que) - Botones de grupo redondeados, acordeon colapsado por defecto - QR en pubs de invites_view.js (renderPubTable async) + cambio_apk_repack.txt + Como reempaquetar el APK con los cambios CSS/JS para instalar en Android. + - Metodo correcto: modificar SOLO assets/nodejs-project.zip en el APK original + - Por que falla si se reempaqueta todo (resources.arsc debe ser STORED) + - Comandos exactos: zip -d META-INF, zip -0, zipalign, apksigner + - Keystore: /home/sito/oasis-release-key.jks (alias: oasis, pass: oasis123) + - APK lista: /home/sito/oasis-v0.6.8-modded.apk + -------------------------------------------------------------- NOTA PARA EL DEVELOPER -------------------------------------------------------------- diff --git a/CONTEXT/cambio_apk_repack.txt b/CONTEXT/cambio_apk_repack.txt new file mode 100644 index 00000000..c80dad5a --- /dev/null +++ b/CONTEXT/cambio_apk_repack.txt @@ -0,0 +1,103 @@ +=============================================================== + 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.6.8-modded.apk <- APK lista para instalar + /home/sito/oasis-v0.6.8.apk <- APK original sin modificar + /home/sito/oasis-release-key.jks <- keystore de firma + alias: oasis | password: oasis123 + +-------------------------------------------------------------- +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: + ~/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 \ + --out /home/sito/oasis-v0.6.8-modded.apk \ + /tmp/oasis-aligned.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.6.8-modded.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.6.8-modded.apk + -> debe decir "Verifies" diff --git a/nodejs-project/nodejs-project/src/client/assets/styles/mobile.css b/nodejs-project/nodejs-project/src/client/assets/styles/mobile.css index ed4f69c1..105960f8 100644 --- a/nodejs-project/nodejs-project/src/client/assets/styles/mobile.css +++ b/nodejs-project/nodejs-project/src/client/assets/styles/mobile.css @@ -237,6 +237,7 @@ a.logo-icon img.logo-icon { gap: 6px !important; padding: 6px 0 6px 0 !important; align-items: center !important; + justify-content: center !important; } .panel-quicklinks::-webkit-scrollbar { display: none !important; }