Ir al contenido

Instalar en Android

APX Android no está en Google Play ni en el App Store. Se distribuye igual que APX: como un archivo que se puede revisar, desde el repositorio que lo compiló.

Descarga:

https://github.com/agentprojectcontext/apx/releases/download/android-latest/apx.apk

Ese link no se mueve nunca. Siempre apunta al último build firmado, así que se puede guardar, imprimir como QR o mandárselo a otra persona.

Dos caminos que terminan en el mismo lugar. Elegí el que coincida con lo que tenés a mano.

Sin cable y sin computadora.

  1. Abrí el link de descarga en el navegador del teléfono.
  2. Tocá el archivo descargado. Android va a decir que no puede instalar desde esta fuente.
  3. Permitilo: Ajustes → Instalar apps desconocidas → <tu navegador> → Permitir. El permiso es por app: estás confiando en tu navegador, no en todas las apps.
  4. Tocá Instalar y después Abrir.
  5. Vinculala: mirá Conectarla más abajo.

Cada release publica el checksum del APK al lado:

Ventana de terminal
curl -sL https://github.com/agentprojectcontext/apx/releases/download/android-latest/apx.apk.sha256
shasum -a 256 apx.apk

Las dos líneas tienen que mostrar el mismo hash.

Esta es la parte que decide cómo se comporta la app, y conviene entenderla antes de vincular y no después. La app pide una dirección —la de tu daemon— y hay tres tipos. No son intercambiables.

http://127.0.0.1:7430, hecho real por adb reverse. apx android install lo deja armado; a mano es:

Ventana de terminal
adb reverse tcp:7430 tcp:7430

El daemon se queda en loopback y no se expone nada a ninguna red. Se muere cuando desenchufás el cable. Ideal para la primera instalación y para desarrollo; no es una dirección que el teléfono pueda conservar.

Ventana de terminal
apx panel share
apx restart

El daemon liga una IP local y el teléfono lo alcanza en http://192.168.x.x:7430 mientras los dos estén en el mismo WiFi. Rápido y privado —no sale nada de la casa— y se termina en cuanto el teléfono se va.

Es http://, que a la app nativa no le molesta pero al navegador sí: no se puede instalar el panel como app, no hay micrófono y no hay portapapeles. Esos tres necesitan un contexto seguro, y esa es una regla del navegador, no una decisión de APX.

Se apaga con apx panel unshare.

Ventana de terminal
apx panel tailscale on

Le da al daemon un nombre estable con certificado HTTPS real, alcanzable desde cualquier dispositivo logueado en la misma tailnet. Es tailscale serve, no funnel: no se publica nada a internet.

Es la única opción que funciona fuera de casa, y la única que le da al navegador un contexto seguro. Si el teléfono va a quedar conectado, esta es la dirección con la que hay que vincular.

La app necesita la dirección del daemon y un código de una vez. apx android install hace esto por el cable. A mano:

  1. Corré apx pair web en la máquina del daemon: imprime un código y un QR.
  2. Abrí APX en el teléfono, poné la URL del daemon y el código, tocá Vincular y abrir.
  3. El dispositivo aparece en Ajustes → Dispositivos del panel, con su propio token, revocable por separado.

El teléfono recibe un token propio de kind: android. Instalar la app no toca un navegador que ya estuviera vinculado en el mismo teléfono: Android aísla el almacenamiento de cada app, así que son dos clientes distintos.

Android no deja que una app se otorgue a sí misma los permisos que importan. Cada uno es un switch explícito, una sola vez:

Lo que querésDónde está
NotificacionesAceptar el cartel del primer arranque
La mascota flotanteMostrar sobre otras apps
Detección de viajesMenú APX → Activar detección de viajes → acceso a notificaciones
Avisos de manejo con No molestarMenú APX → Permitir avisos de manejo
Que los avisos lleguen a tiempo desde el bolsilloMenú APX → Quitar restricción de batería

La página de la app Android explica qué compra cada uno.

La mitad del auto tiene dos niveles, y un APK instalado a mano solo recibe uno gratis:

  • Las tarjetas de mensajes en el head unit andan apenas se instala la app.
  • La pantalla propia de APX en el auto —la que ofrece las cuatro respuestas a un aviso de proximidad— no aparece hasta que los ajustes de desarrollador de Android Auto tengan Fuentes desconocidas activado. Android Auto reserva esa superficie para apps instaladas desde Google Play, y falla en silencio: no hay chip y no hay error.

Para activarlo: abrí los ajustes de Android Auto (Ajustes → Dispositivos conectados → Preferencias de conexión → Android Auto), tocá Versión diez veces y en el menú de desarrollador tildá Fuentes desconocidas.

Desde la app. Menú de APX → Buscar actualizaciones. Si hay una versión nueva te la ofrece, la baja, la verifica contra el sha256 publicado y se la pasa al instalador de Android. La app también mira sola cada vez que la abrís, y sólo habla cuando hay algo que instalar.

La primera vez Android pide permiso para que APX pueda instalar apps. Es un permiso por app, se concede una sola vez y no hay forma de saltearlo fuera de Play —ni debería haberla: una app que puede reemplazarse a sí misma sin que le pregunten a nadie puede reemplazarse por cualquier cosa.

Sin la app. Instalá el APK nuevo encima del viejo: apx android install otra vez, o bajarlo y tocarlo. El pairing, la configuración y los permisos se mantienen igual.

La app está en el repositorio, y el release se compila desde ahí con .github/workflows/android.yml.

Ventana de terminal
cd src/interfaces/android
./gradlew testDebugUnitTest assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk

Eso necesita un JDK 17 y el SDK de Android. Un build release además necesita una keystore, provista por el entorno (APX_KEYSTORE, APX_KEYSTORE_PASSWORD, APX_KEY_ALIAS, APX_KEY_PASSWORD); sin ella, assembleRelease produce un APK sin firmar que Android no instala.

apx android install instala el APK publicado incluso dentro de un checkout que tiene su propio build — uno local está firmado con la clave de debug, y el primer release de verdad no puede actualizarlo. Con --local usás el tuyo.