3.8 KiB
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, 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
gpgygit, que en Android no existen. Quedan la copia de seguridad cifrada con contraseña y sincronizar con otro Caudal. - Un nodo con dirección
.onionnecesita 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).