OASIS_MOBILE/README.md
hacklab 894f7b24a2 README: novedades de la 1.3.5 aparte, dibujos dentro del repo y tabla de la APK
Los dibujos de Que es Oasis se cargaban de la wiki de gitea y sin ella salian rotos;
ahora van en docs/esquemas. El de la arquitectura de la APK era de la 1.2.5 y del
envoltorio propio: lo cambia una tabla de lo que hay dentro ahora.
2026-10-23 20:29:32 +02:00

278 lines
13 KiB
Markdown

# OASIS_MOBILE — rama de desarrollo experimental
> ## ⚠ ESTO NO ES OASIS OFICIAL
>
> Esta es una **rama de desarrollo experimental** mantenida por el hacklab, **no
> afiliada** al proyecto original.
>
> ### El repositorio oficial de Oasis es el de epsylon: https://github.com/epsylon/oasis
>
> Si quieres **usar Oasis de verdad, instala el oficial**. Lo que hay aquí puede
> romperse, cambiar de forma incompatible o desaparecer sin aviso. No está auditado y
> no tiene garantía de ninguna clase.
>
> **Los fallos de esta rama se reportan aquí, nunca a epsylon.**
Si vas a desarrollar, lee antes la [guía de desarrollo](GUIA_DE_DESARROLLO.md). Ahí
está qué se puede tocar y qué no. En corto: el backend, el middleware, los modelos y
las traducciones son de epsylon y no se tocan; lo nuestro va en hojas, vistas y rutas
propias.
Versión base: Oasis 1.3.5 · Rama: `PRUEBAS` ·
[Documentación completa](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki) ·
[Versión de escritorio](https://gitea.laenre.net/hacklab/OASIS_LINUX)
![Oasis Mobile: actividad, menú con los perfiles Mínimo y Activista, y una tribu](docs/capturas/00-portada.png)
[⬇ Descargar la APK](https://gitea.laenre.net/hacklab/OASIS_MOBILE/releases) ·
Android 7 o superior, 64 bits · se instala junto al Oasis oficial sin pisarlo
### Novedades de esta versión
- Al día con Oasis 1.3.5: cabecera por módulo, buscador con más opciones, avisos de
versión y sugerencias, y su CSP sin JavaScript en la página.
- Arranca con el perfil Mínimo: chats, teléfono, eventos, emergencias, invitaciones y
copia de seguridad. Encima van Acampada (16 módulos), Activista (24) y los del dev,
de menos a más, cada uno con su barra de abajo. Se cambia en *Ajustes → Perfil*.
- Un solo skin, Activista: letra del sistema, bordes finos y sin sombras. Los colores
de serie son los de la APK oficial (negro y oro) y se cambian en *Ajustes → Colores*.
- Menú sin JavaScript: la hoja se abre con un ancla y el gesto atrás la cierra sin
cambiar de pantalla.
- Tribus: las pestañas se quedan a la vista al cambiar de sección, todas en el mismo
estilo, y los botones de la columna (unirse, invitar, suscribirse, etiquetas) de
44 px.
- Responder en los chats es un botón con su nombre, no una flecha de 27 px junto a la
hora; Enviar ocupa el ancho. Los comentarios salen abiertos, con la caja a la vista.
- Iconos de línea propios en vez de los emoji del dev en los avisos, las fichas de
visibilidad (pública, mutuos, cifrada, licencia, tribu) y Compartir.
- Publicar lleva al primer sitio de escribir que esté encendido (blog, feed, foro o
wiki); antes, sin blogs, acababa en Módulos.
### Lo que ya traía la rama
- 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.
- Al abrir se ve la actividad, no un menú. Los módulos están en la quinta pestaña de
abajo, Menú, que abre una hoja desde abajo en cualquier pantalla.
- 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.
- Iconos que se entienden en el lanzador y en la barra, en vez de letras del alfabeto
vai. La barra marca dónde estás y se esconde al escribir.
- Tribus en filas: doce comisiones caben en tres pantallas, no en diez. Dentro de una
tribu, las secciones van en una tira de fichas.
- Módulos con interruptores, agrupados como en el lanzador.
- Pantallas más aprovechadas: un margen de 14 px en vez de los 74 que se sumaban, una
sola letra para botones, buscador en una línea y el buzón en pocas líneas por mensaje.
- Fotos más seguras: si una foto no se puede limpiar de metadatos (ubicación,
cámara…), no se sube y se avisa.
- DNS: primero el resolutor del sistema, que respeta la VPN y el DNS privado de
Android; los públicos quedan de respaldo.
---
## Lo que añade
| | Oasis oficial | Esta rama |
|---|---|---|
| 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 | Skin Activista, actividad al abrir, hoja de Menú con iconos, barra de cuatro atajos |
| Primer arranque | Casi sesenta módulos encendidos | Perfil Mínimo (6 módulos) y una escalera de perfiles hasta los del dev |
| 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 |
| 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
epsylon, sin tocar.
---
## Qué es Oasis, en cuatro dibujos
Una red social sin servidor: publicas en tu propio equipo y los demás se traen una
copia. No hay cuenta, no hay contraseña y nadie puede borrarte.
![Qué es Oasis](docs/esquemas/01-red.png)
Los mensajes viajan de vecino en vecino, así que llegan a gente con la que nunca te
has conectado. Por eso funciona incluso sin internet, entre dos móviles en la misma wifi.
![Cómo llega un mensaje](docs/esquemas/02-gossip.png)
Un pub es solo un nodo que no se apaga nunca. No es un servidor con tus datos: no
guarda tu identidad, no decide qué ves y no puede borrarte.
![Qué es un pub](docs/esquemas/04-pub.png)
Todo lo que publicas se encadena y va firmado con tu clave. Nadie puede colar un
mensaje en tu nombre ni cambiar lo que dijiste.
![Tu registro](docs/esquemas/14-registro.png)
> La explicación completa —los saltos, las tribus, el LARP, los módulos— está en
> [Entender Oasis en diez minutos](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Entender).
---
## Llamadas y salas
![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, 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.
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.
---
## La interfaz
![La interfaz por dentro](docs/capturas/esquema-interfaz.png)
<p align="center">
<img src="docs/capturas/01-actividad.png" width="200">
<img src="docs/capturas/02-menu.png" width="200">
<img src="docs/capturas/03-menu-activista.png" width="200">
</p>
<p align="center">
<img src="docs/capturas/04-tribu.png" width="200">
<img src="docs/capturas/05-blog.png" width="200">
<img src="docs/capturas/06-ajustes.png" width="200">
</p>
Lo que sale al instalarla: la actividad al abrir y la hoja de Menú con el perfil
Mínimo. Después, con el perfil Activista: el menú completo, una tribu, un blog y
Ajustes. Capturas a 412 px, en español, con los colores de serie. Cómo rehacerlas:
`docs/capturas/generar_portada.py`.
Casi sesenta módulos no caben en la pantalla de un teléfono. Al abrir la app se ve la
actividad, lo que ha pasado en la red. Abajo hay cuatro atajos que eliges tú y una
quinta pestaña fija, Menú, que abre desde abajo una hoja con todos los módulos por
secciones, como el cajón de apps del móvil. Está en todas las pantallas. Por qué así,
y no un menú arriba o una hamburguesa: [docs/ESTUDIO_NAVEGACION.md](docs/ESTUDIO_NAVEGACION.md).
Solo aparecen los módulos activos. En *Ajustes → Perfil* se eligen de golpe, de
menos a más: Mínimo, Acampada, Activista y los del dev. Un perfil cambia los módulos y
la barra de abajo, no el aspecto: los colores van en *Ajustes → Colores*.
---
## Cómo está hecha la rama
![Cómo va la rama encima de Oasis](docs/capturas/esquema-rama.png)
Oasis lo desarrolla epsylon y saca versión casi cada día. Para no tener que rehacer la
rama en cada una, lo nuestro va en ficheros propios: hojas de estilo, unas pocas
vistas, un router que va delante del suyo y el envoltorio de Android. El backend, el
middleware, los modelos y las traducciones son suyos y no se tocan. Las normas están
en la [guía de desarrollo](GUIA_DE_DESARROLLO.md) y las cifras en
[docs/FRONTERA_UPSTREAM.md](docs/FRONTERA_UPSTREAM.md).
---
## Empezar desde cero
![De cero a estar dentro](docs/esquemas/05-empezar.png)
| | |
|---|---|
| [oasis-project.pub](https://oasis-project.pub) | Directorio de pubs, con invitaciones y estado de cada uno |
| [0asis.net](https://0asis.net) | El proyecto explicado desde el principio |
| [wiki.solarnethub.com](https://wiki.solarnethub.com/socialnet/overview) | La documentación oficial, módulo por módulo |
---
## Instalar
La APK no está en ninguna tienda: se descarga de las *releases* de este repositorio
y se instala a mano, con orígenes desconocidos activado. Se instala junto al Oasis
oficial sin pisarlo —el identificador es `net.laenre.oasis`—, así que puedes tener
los dos y comparar.
Necesita unos 350 MB libres. El primer arranque tarda entre 15 y 60 segundos porque
descomprime el servidor.
> Verifica la huella de la firma antes de instalar una APK bajada de un servidor
> propio: `apksigner verify --print-certs`
### Compilar
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
./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:
| Pieza | De quién | Qué hace |
|---|---|---|
| La app Android (ventana, servicio, notificaciones, puente `.audio_bridge`) | Del dev, tal cual | Abre un WebView en `127.0.0.1:3000`, mantiene vivo el servidor y da micrófono y cámara |
| `node_modules` | Del dev, de su APK oficial | Las dependencias, podadas para el móvil |
| El servidor (`assets/nodejs-project.zip`) | Oasis 1.3.5 con nuestra capa | Se descomprime al primer arranque y cada vez que cambia la versión |
| El paquete | `net.laenre.oasis` | Para convivir con la oficial (`com.solarnethub.oasis`) |
Detalle, sacado de la APK oficial: [docs/ARQUITECTURA_APK.md](docs/ARQUITECTURA_APK.md).
---
## Documentación
Para desarrollar, en el propio repositorio:
| | |
|---|---|
| [GUIA_DE_DESARROLLO.md](GUIA_DE_DESARROLLO.md) | Qué se toca, qué no y cómo hacer cada cosa |
| [docs/FRONTERA_UPSTREAM.md](docs/FRONTERA_UPSTREAM.md) | Cuánto cambia el dev en cada versión, medido |
| [docs/USABILIDAD_PAD.txt](docs/USABILIDAD_PAD.txt) | Pruebas de usabilidad en el móvil |
Todo lo de arriba, en detalle, está en la
[wiki](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki):
| | |
|---|---|
| [Entender Oasis](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Entender) | La red, el gossip, los saltos, los pubs, las tribus y el LARP |
| [Empezar desde cero](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Empezar) | Invitación, seguir gente, abrir tu blog o tu tienda |
| [Llamadas](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Llamadas) | Teléfono y Salas en el móvil |
| [La interfaz](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Interfaz) | Botón por botón |
| [Identidades](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Identidades) | Varias cuentas en el mismo móvil |
| [Compilar la APK](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Compilar) | Y cómo se publica una versión |
| [Estructura del código](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Estructura) | Dónde vive cada fichero y por qué ahí |
| [Si algo va mal](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Problemas) | Los fallos que han pasado de verdad |
| [Qué NO tiene](https://gitea.laenre.net/hacklab/OASIS_MOBILE/wiki/Limitaciones) | Lo que falta respecto al oficial, sin adornos |
---
## El proyecto original
Esta rama existe gracias a y por encima de el trabajo de epsylon. El código, la
arquitectura, los módulos y la red son suyos.
- Código: https://github.com/epsylon/oasis
- Proyecto: https://solarnethub.com
- Wiki: https://wiki.solarnethub.com/socialnet/overview
## Licencia
AGPL-3.0, la misma que el proyecto original.