Cómo está estructurado el GPS en Android
Todos nuestros teléfonos Android tienen GPS incorporado. Sí, esa cosa que permite geolocalizarnos con precisión. Pero realmente, ¿cómo diantres funciona? Hoy toca subir un poco el nivel de dificultad y dedicarle unos minutos a entender la estructura y arquitectura del GPS. Aunque parezca complicado, no lo es tanto.
Arquitectura del GPS
Si miramos la imagen de la cabecera, podemos detectar 5 componentes claves:
- GPS Chip
- GPS Driver
- GL Engine
- Android Framework
- Aplicaciones de usuario
Veamos cómo interactúa cada una de ellas.
GPS Chip
Es un receptor de Radio Frecuencia que se comunica directamente con los satélites GPS. Para más detalles sobre la información que se transmite o cómo funciona este componente, podéis echarle un vistazo a aquí o aquí.
GPS Driver
El GPS Driver usa API’s de nivel Bajo para comunicarse con el Chip GPS. Consiste sencillamente en una serie de archivos que se encuentran en /System/lib/hw o /Vendor/Lib/hw y usualmente empiezan con el prefijo GPS* y acaban con el sufijo *SO dependiendo de la versión de Android ( ejemplos: gps.default.so o gps.aries.so )
GL Engine
El meollo de la cuestión. Consiste de una dirección o path (/system/bin) seguido de nombres como glgps o gpsd. Funciona utilizando unos parámetros de configuración que consisten en archivos .xml o .conf ( glconfig.xml, gps.xml, gpsconfig.xlm, gps.conf). Todos estos nombres dependen otra vez de la versión de Android y que generalmente se encuentran en (/system/etc, /system/etc/gps o /vendor/etc).
Dependiendo de la configuración y de la plataforma. EL GL Engine coge la Información de Localización de las torres móviles y lee el NVRAM (lugar donde se almacena data del GPS lock). La información NVRAM se encuentra básicamente en /data/gps en archivos acabados en .sto y .dat (ejemplo: gldata.sto, lto.dat, xtra.bin, epo.dat).
Usando toda esta información, el GL Engine asiste al GPS Driver: básicamente es capaz de detectar múltiples satélites GPS para los que está programado el GPS Driver, pero para fijar la posición necesita información adicional que puede descargar de los mismos satélites GPS (más lento) o bien puede acceder a Internet para usar los servidores SUPL/NTP (mayor velocidad). A continuación, guarda todos estos datos en el NVRAM para próximos usos.
Android Framework o Servicios de Localización
Consiste en una serie de clases como puede ser el Location Manager, que proporcionan servicios para que una aplicación use el GL Engine. Es una especie de puente entre la aplicación y el GL Engine. Aquí un poco más de info al respecto.
Aplicaciones de usuario
Cualquier aplicación que use el GPS. Google Maps, Navigation, Sygic, etc..
Mejora la rapidez de tu GPS con el GPS Fix
Teniendo todo esto que hemos visto en mente, vamos a ver cómo funcionan todas las aplicaciones/soluciones que mejoran el rendimiento de tu GPS como pueden ser GPS Status, GPS Test, GPS Doctor y demás. Básicamente, lo que hacen estas aplicaciones son dos cosas:
- Descargar XTRA data (lto.dat, xtra.bin, epo.dat, gldata.sto, etc…)
- Modificar el GPS.conf (Requiere permisos root)
Pero no siempre funciona. Los dispositivos usan por defecto el Servidor SUPL de Google, pero muchas veces, al cambiar de ROM o por razón X, son incapaces de usarlo debido a problemas de certificados inválidos o caducados. El servidor de Google lo rechaza y por tanto, nunca te fija la posición.
Una posible solución es cambiar el servidor SUPL por el de Nokia (supl.nokia.com:7275). Para hacerlo basta con que sigáis estas instrucciones.
Ahora ya sabéis cómo funciona el GPS en vuestro Android. Espero que haya sido interesante.
Vía XDA