android: la APK se monta sobre la oficial del dev

La app Android de epsylon trae desde la 1.3.x un puente nativo de audio y
camara (.audio_bridge) para el Telefono y las Salas, y no tiene el codigo
publicado. android/scripts/sobre_oficial.sh coge su APK de la misma version,
le cambia el backend por el de la rama (con su node_modules), le pone el
paquete net.laenre.oasis (y los authorities, el permiso propio y las acciones
de llamada) para que conviva con la oficial, y la monta y firma. apktool va
con version y huella fijas.

Probado en el emulador: el Telefono ofrece llamadas y en una sala el
microfono graba y se corta al salir. README, guia, android/README y los
esquemas lo cuentan; el proyecto Gradle propio queda sin uso.
This commit is contained in:
hacklab 2026-10-19 14:12:18 +02:00
parent 34265c2ed0
commit 6bacafea64
9 changed files with 182 additions and 36 deletions

View file

@ -35,8 +35,10 @@ Android 7 o superior, 64 bits · se instala junto al Oasis oficial sin pisarlo
parlamento, votaciones y eventos. El resto se enciende en *Módulos* o en
*Ajustes → Workflows*.
- Las llamadas son las de Oasis. Fuera Karvan, el módulo propio de salas: ahora se usan
el Teléfono y las Salas del dev. Ojo: en esta APK todavía no suenan, porque a nuestra
app Android le falta el puente de audio nativo que sí trae la oficial (ver abajo).
el Teléfono y las Salas del dev, con su levantar la mano, grabación y emisión.
- La APK se monta sobre la oficial: se coge la del dev, se le cambia el backend por el
de la rama y se le da otro nombre de paquete. Así trae todo lo nativo del dev (el
puente de audio y cámara, las notificaciones de llamada) y convive con la oficial.
- Votaciones como en asamblea: al crear una se elige Sí/No, semáforo (verde, amarillo,
rojo) o termómetro (del 1 al 5). Los resultados salen en barras.
- Borrar pide confirmación. Antes la X de una tribu la borraba de un toque.
@ -59,12 +61,12 @@ Android 7 o superior, 64 bits · se instala junto al Oasis oficial sin pisarlo
| | Oasis oficial | Esta rama |
|---|---|---|
| Llamadas y salas | Teléfono y Salas, con micrófono y cámara | Los mismos; el puente de audio de Android todavía falta |
| Llamadas y salas | Teléfono y Salas, con micrófono y cámara | Los mismos, tal cual |
| Interfaz de móvil | El menú de escritorio en una pantalla pequeña | Tema Acampada, lanzador con iconos, fichas, barra de cuatro atajos |
| Primer arranque | Casi sesenta módulos encendidos | Modo acampada: lo justo para organizarse |
| Votaciones | Seis opciones fijas en una tabla | Sí/No, semáforo o termómetro, con barras |
| Varias identidades | Una por instalación | Varias en el mismo móvil, con aviso si dos comparten clave |
| Envoltorio Android | El del dev, sin código publicado | Proyecto Gradle propio y abierto: permisos, subida de ficheros, servicio que sobrevive |
| App Android | La del dev | La del dev, con el backend de la rama y paquete propio (`net.laenre.oasis`) |
| Metadatos de las fotos | Se quitan solo si está `sharp`; en Android nunca | Se quitan siempre: GPS, marca, modelo, número de serie |
Los nombres de las categorías, los módulos y el resto de la aplicación son los de
@ -104,13 +106,15 @@ mensaje en tu nombre ni cambiar lo que dijiste.
![Llamadas: las del dev, con el móvil enchufado](docs/capturas/esquema-llamadas.png)
El Teléfono (llamadas de uno a uno, con buzón de voz) y las Salas (hasta cincuenta
personas, con vídeo, grabación y emisión) son de Oasis. En Android el sonido y la
cámara no los maneja Node: el servidor se conecta a un puente nativo de la app
(`.audio_bridge`), que graba, reproduce, saca fotogramas de la cámara y emite ficheros.
personas, con vídeo, levantar la mano, grabación y emisión) son de Oasis. En Android
el sonido y la cámara no los maneja Node: el servidor se conecta a un puente nativo de
la app (`.audio_bridge`), que graba, reproduce, saca fotogramas de la cámara y emite
ficheros.
La APK oficial del dev trae ese puente. La de esta rama todavía no: nuestra app
Android es otra (tiene el código publicado) y el puente hay que escribirlo. Hasta
entonces, en esta APK el Teléfono dice que las llamadas no están disponibles.
Ese puente está en la app Android del dev, que no tiene el código publicado. Por eso la
APK de esta rama se monta sobre la oficial: se queda con su app tal cual y solo cambia
lo que corre dentro (el backend con nuestra capa) y el nombre del paquete. Probado en
el emulador: se entra en una sala y el micrófono graba.
En la barra de arriba, junto al avatar, está el botón de *No molestar* del Teléfono.
@ -187,25 +191,23 @@ descomprime el servidor.
### Compilar
Con Android Studio, lo más fácil:
```sh
./android/scripts/android-studio.sh # trae el Oasis oficial y su APK, y empaqueta el backend
```
Después, en Android Studio: *File → Open →* la carpeta `android/`, esperar al Gradle
Sync, y *Build → Build App Bundle(s) / APK(s) → Build APK(s)*. Si cambias algo en
`src/` o en `main.js`, vuelve a lanzar el script antes de compilar.
Desde la terminal, paso a paso:
La APK se monta sobre la oficial de la misma versión. Hace falta Java 17 o más y las
build-tools de Android (zipalign y apksigner); apktool se baja solo.
```sh
cd android
# la primera vez hace falta la APK oficial de la MISMA versión (ahora la 1.3.3):
# de ella salen las librerías nativas y el node_modules podado del móvil
OASIS_APK_BASE=/ruta/oasis-v1.3.3.apk ./scripts/release.sh # compila, verifica y calcula la huella
./scripts/sobre_oficial.sh # baja la oficial, le pone el backend de la rama, la firma
# para publicar, con la clave del hacklab:
OASIS_KEYSTORE=... OASIS_KEYSTORE_PASS=... OASIS_KEY_ALIAS=... ./scripts/sobre_oficial.sh
```
Sale en `android/build/sobre-oficial/oasis-<versión>-hacklab.apk`. Sin clave se firma
con la de depuración y queda depurable, para poder inspeccionarla desde
`chrome://inspect`.
El proyecto Gradle propio de `android/` (`release.sh`, Android Studio) sigue ahí, pero
ya no es el camino: no tiene el puente de audio y en él no hay llamadas.
![Qué hay dentro de la APK](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/raw/img/esq/16-arquitectura-movil.png)
---