¿Cuánto mide tu scroll? 📏
Una app para Android que cuenta en centímetros, metros y kilómetros todo lo que tu pulgar recorre en TikTok, Instagram, YouTube y compañía. Con mascotas que sufren contigo, logros absurdos y una barra de dopamina 100% científica de broma.
- Descarga
Scrollometro.apkdesde el teléfono y ábrelo. - Abre la app: la bienvenida te explica todo y te lleva a Accesibilidad → Apps instaladas → Scrollómetro → activar.
- Si Android dice «Controlado por la configuración restringida»: Info de la app → menú ⋮ → Permitir ajustes restringidos, y vuelve a activarlo.
Requiere Android 7.0 o superior.
¿Por qué Play Protect se pone nervioso? Scrollómetro usa el servicio de Accesibilidad, que es el único camino que da Android para saber que hubo scroll en otras apps. Es el mismo permiso que usan las apps de fraude, así que Google revisa con lupa toda app que lo pide y no viene de la Play Store. Por eso todo el código está aquí, abierto: puedes ver exactamente qué hace y qué no (Privacidad).
Actualizaciones: la app revisa este repositorio al abrirse y, si hay versión nueva, te la ofrece con un toque. Android solo la instala si viene firmada con la misma llave que la que ya tienes.
Si tenías la 0.1 o la 0.2 (firmadas con la llave de prueba), desinstálalas una vez antes de instalar la 0.3. Desde la 0.3 todo se actualiza solo.
- Mide de verdad: suma cuántos píxeles se movió la pantalla en cada scroll y los convierte a centímetros con la densidad real de tu pantalla (
ydpi). - Notificación fija con el total del día, tus apps más scrolleadas y una frase de tu mascota.
- Tres mascotas con cuatro estados según lo que llevas: el pulgar (fresquito → zombie 🧟), el caracol (impresionado → llorando en baba) y el cerebro (fresco → frito en sartén 🍳).
- Equivalencias absurdas: canchas de fútbol, micros en fila, Gran Torre Santiago, el Everest, el camino a Puerto Montt, lo que tardaría un caracol…
- Barra de dopamina según tu ritmo de los últimos 10 minutos. Es de broma, no mide nada de tu cerebro.
- 32 logros, desde «Primer toque» (1 cm) hasta «Hasta la Luna» (384.400 km).
- Meta diaria que te reta cuando te pasas.
- Widgets 2×2 y 4×2 para el escritorio.
- Tarjeta para historias (1080×1920) para presumir o avergonzarte.
- Detalle por app: TikTok, Instagram, YouTube, X… cada una con su distancia.
- Ranking mundial (opcional): el Top 25 de pulgares, con tu apodo y tu mascota.
Scrollómetro ve cuándo se mueve tu pantalla, así que esto importa. Lo que hay, verificable en el código:
| Dónde | |
|---|---|
No lee lo que hay en pantalla. El servicio se declara con canRetrieveWindowContent="false": Android no le entrega textos, imágenes ni nada del contenido. |
scroll_tracker_service.xml |
| Solo escucha dos tipos de evento: «hubo scroll» y «cambió la pantalla». Del evento usa el nombre de la app y cuántos píxeles se movió. | ScrollAccessibilityService.kt, ScrollStore.kt |
Todo queda en tu teléfono: totales por día y por app en SharedPreferences. Sin cuentas, sin servidor propio, sin analítica, sin anuncios. Lo único que puede salir es lo del ranking, y solo si te unes (ver abajo). |
ScrollStore.kt |
| Actualizaciones: lee el último release público de este repo y descarga el APK si hay versión nueva. No envía ningún dato tuyo. | src/lib/updates.ts, Updater.kt |
| Ranking opcional (Top 25): solo si te unes desde Logros, se envía a dreamlo.com tu apodo (con un número), tus metros totales y tu mascota. Va por HTTP sin cifrar porque dreamlo gratis no tiene HTTPS; es la única excepción (el resto de la app exige HTTPS). «Salir del ranking» borra tu entrada. | Leaderboard.kt, scrollometro_network_security.xml |
Actualizaciones verificadas: solo se descargan desde https://github.com/, se revisa que el APK sea de esta app y de una versión mayor, y Android lo rechaza si no viene firmado con la misma llave. |
Updater.kt |
| Permisos mínimos: Accesibilidad, notificaciones, internet (GitHub para actualizaciones y, si te unes, dreamlo para el ranking) e instalar actualizaciones. Se bloquean explícitamente dibujar sobre otras apps, almacenamiento y vibración. | app.json |
Lo apagas cuando quieras en Ajustes → Accesibilidad → Scrollómetro.
Android avisa a los servicios de accesibilidad cada vez que una vista hace scroll. Scrollómetro usa, en orden:
- Delta (
scrollDeltaY, Android 9+): los píxeles exactos que se movió. Es lo más preciso y lo que usan Instagram y la mayoría de las apps. - Posición (
scrollY): la diferencia con la posición anterior, para vistas que informan dónde están y no cuánto se movieron. - Índice (
fromIndex): en feeds que pasan de a una pantalla, cada elemento ≈ alto de pantalla ÷ elementos visibles.
El scroll horizontal (carruseles, historias) no cuenta. Los píxeles se pasan a cm con px ÷ ydpi × 2,54. En Ajustes → Avanzado → Eventos crudos puedes ver cómo se midió cada evento.
# Solo para uso personal y para revisar el código (ver Licencia)
git clone https://github.com/foxen2005/scrollometro.git
cd scrollometro
npm install
npx expo prebuild -p android
cd android && ./gradlew assembleRelease -PreactNativeArchitectures=arm64-v8aEl servicio de accesibilidad es código nativo (módulo Expo local), así que no corre en Expo Go: hay que compilar el APK. Requiere Node 20+, JDK 17+ y el SDK de Android.
- Windows: CMake 3.22 (el que viene por defecto) falla con rutas de más de 260 caracteres. El plugin
withCmakeVersionusa CMake 3.31.6:sdkmanager --install "cmake;3.31.6". - Ranking: las claves de dreamlo (
DREAMLO_PRIVATE,DREAMLO_PUBLIC) se leen de~/.gradle/gradle.propertiesy no están en el repo. Sin ellas, el ranking simplemente no aparece. - Firma: el build release usa la llave propia si existe
SCROLLOMETRO_STORE_FILEen~/.gradle/gradle.properties(withReleaseSigning); si no, cae a la llave de prueba. Los releases oficiales van siempre con la llave propia. - Publicar:
scripts/release.ps1-Version X.Y.Z -Notes "…"sube la versión, compila, verifica la firma y crea el release conScrollometro.apk. - Mascotas del widget y logo:
scripts/export-mascots.mjsyscripts/export-logo.mjsgeneran los PNG desde los mismos SVG de la app.
App.tsx — pestañas, bienvenida, compartir, consulta cada 1 s
src/
├── screens/ — Hoy, Logros, Ajustes, Bienvenida, Compartir
├── components/ — Mascot (SVG animado), UpdateCard, ui (tarjetas, botones)
└── lib/
├── content.ts — formatos, equivalencias, niveles de dopamina, 32 logros
├── mascots.ts — las mascotas en SVG (3 × 4 estados)
└── updates.ts — búsqueda e instalación de versiones desde GitHub
modules/scroll-tracker/ — módulo nativo (Kotlin)
├── ScrollAccessibilityService.kt — recibe los eventos de scroll
├── ScrollStore.kt — px → cm, totales, histórico, dopamina, notificación
├── ScrollWidgets.kt — widgets 2×2 y 4×2
├── Updater.kt — descarga + instalador por sesión
└── ScrollTrackerModule.kt — puente con JS
maqueta/index.html — la maqueta original, con animación
docs/ — sitio (GitHub Pages)
El código es visible, pero no libre: PolyForm Strict 1.0.0. Puedes leerlo, auditarlo y usar la app para fines personales y no comerciales; no puedes modificarla, redistribuirla ni publicar copias o versiones derivadas. El nombre, el logo, el ícono y las mascotas quedan con todos los derechos reservados (NOTICE).
¿Una idea, un arreglo o quieres colaborar? Abre un issue.
Hecho en Chile por Digital Fox. Idea, logros y lentes pixelados: Jean.



