# Caudal para Android **Estado: publicada desde la 0.3.5.** Probada en un teléfono: arranque, bloqueo con huella o PIN, datos que se conservan, ficheros que se eligen y se guardan, giro de pantalla, tema claro y oscuro, y enlace con un Caudal en StartOS por la red de casa y, fuera de casa, por `.onion` con Orbot. ## Qué es La misma aplicación que en un ordenador, sin reescribir nada: el programa de Python (`programa/cartera`) va dentro de la aplicación gracias a [Chaquopy](https://chaquo.com/chaquopy/), atiende solo en el propio teléfono (`127.0.0.1`) y se enseña en una ventana web. Los datos viven en la carpeta privada de la aplicación. - `app/build.gradle.kts`: versiones, dependencias de Python y la copia del programa (sin la carpeta de entidades concretas) antes de empaquetar. - `app/src/main/python/caudal_android.py`: arranca el servidor de Caudal. - `app/src/main/java/com/huveme/caudal/MainActivity.kt`: pide la huella o el PIN, enseña la página, elige ficheros para ella y guarda los que descarga. ## En qué se diferencia de las otras versiones - **Se entra con la huella o el PIN del teléfono**, cada vez que la aplicación vuelve a primer plano. - **No hay «copia cifrada en tu servidor git»**: usa los programas `gpg` y `git`, que en Android no existen. Quedan la copia de seguridad cifrada con contraseña y sincronizar con otro Caudal. - **Un nodo con dirección `.onion`** necesita Orbot en el teléfono. - Las copias automáticas del sistema (nube del fabricante, traspaso a otro teléfono) están desactivadas: las copias las hace Caudal, cifradas. ## Enlazar con tu Caudal del servidor En «Sincronizar con otro Caudal», el botón «Leer el QR del servidor con la cámara» rellena la dirección de casa, la `.onion` (si el servidor la tiene) y el código (lector ZXing, sin servicios de Google; pide permiso de cámara la primera vez). En StartOS el QR lleva solas las direcciones que da el sistema; en otros servidores se escriben una vez en «Cambiar las direcciones». Si el servidor usa su propia autoridad (StartOS), elige su certificado raíz como fichero: se guarda junto a los datos de la aplicación. Se prueba primero la dirección de casa y, si no responde, la `.onion` por el proxy de Orbot (`127.0.0.1:9050`). Vale cualquier modo de Orbot (VPN, proxy o superusuario) mientras su puerto SOCKS siga en 9050, el de fábrica. ## Pendiente - Icono adaptable. - Opcional: cifrar los datos con una llave del chip de seguridad del teléfono (hoy los protege el cifrado del propio Android). ## Construir Hace falta el SDK de Android (plataforma 35), Java 17 y, para Chaquopy, un `python3.12` en el PATH del equipo que construye. ``` cd empaquetado/android gradle wrapper # una vez, crea ./gradlew ./gradlew assembleDebug # la de pruebas: app/build/outputs/apk/debug/ ``` Para una versión firmada, crea `firma.properties` junto a este fichero (no se versiona) y `./gradlew assembleRelease`: ``` storeFile=/ruta/a/tu/almacen.jks storePassword=… keyAlias=caudal keyPassword=… ``` La clave de firma de Android es para siempre: quien instale una versión solo podrá actualizar a otra firmada con la misma. Guárdala como la clave PGP. Su huella está en `VERIFICAR.md`. Sin `firma.properties`, `assembleRelease` deja un APK sin firmar (`app-release-unsigned.apk`, ya alineado) que se puede firmar después en otro equipo, sin que la clave pase por el que construye: ``` apksigner sign --ks almacen.p12 --ks-key-alias caudal --v4-signing-enabled false --out caudal-X.Y.Z-android.apk app-release-unsigned.apk ``` (`--v4-signing-enabled false`: sin él, `apksigner` deja al lado un `.apk.idsig` que no se publica y que el manifiesto recogería.) El APK se publica además con su manifiesto y firma PGP (`empaquetado/firmar-version.sh`, ver `VERIFICAR.md`).