App Android open source (MIT) para bloquear llamadas SPAM mediante
CallScreeningService (Android 10+), con base de datos local Room, motor de
reglas de detección y sincronización con una base colaborativa pública en GitHub.
Alternativa privacidad-first y descentralizada a Truecaller.
- Google Play: https://play.google.com/store/apps/details?id=com.jhonsu01.opencallshield
- APK directo: descarga el
.apkdesde la sección Releases (cada versión publica el APK e instalable sin la tienda).
✅ Ya disponible en Google Play.
- Bloqueo automático de llamadas vía
CallScreeningService(rechazar o silenciar). - Motor de reglas: contacto conocido → permitir; número reportado → bloquear; prefijo en lista negra → bloquear; número fuera de contactos → opcional.
- Base local Room con números reportados.
- Sincronización con un JSON público en GitHub (descarga diaria vía WorkManager + manual).
- Reportes locales del usuario e historial de llamadas filtradas.
- UI en Jetpack Compose (Material 3).
Kotlin · Jetpack Compose (Material 3) · Room · WorkManager · MVVM · CallScreeningService
# Requiere JDK 17 y Android SDK (compileSdk 34)
./gradlew assembleDebug # APK de depuración instalable
./gradlew assembleRelease # APK de release (requiere firma)El APK queda en app/build/outputs/apk/. La CI (GitHub Actions) también lo compila
en cada push y lo adjunta como artefacto; al crear un tag vX.Y.Z publica un Release
con el APK.
- Instala el APK.
- Concede permisos de contactos / teléfono.
- Pulsa "Activar como app de filtrado de llamadas" y acepta el rol en Android.
- Ajusta las reglas y/o sincroniza la base colaborativa.
La app sincroniza desde spam_numbers.json de este mismo repo:
https://raw.githubusercontent.com/jhonsu01/OpenCallShield/main/spam_numbers.json
Formato:
{
"version": "1.0",
"updated_at": "2026-01-01",
"numbers": [
{ "number": "+1234567890", "reports": 120, "tag": "scam" }
]
}Para ampliar la base, edita spam_numbers.json (o acepta aportes de la comunidad).
La URL es configurable desde la propia app.
Desde la pestaña Cuenta el usuario puede iniciar sesión con GitHub y, desde
Lista SPAM, pulsar "Aportar a la base pública": la app abre un Issue en el
repo con los números reportados en formato JSON, listos para integrar en spam_numbers.json.
Cualquiera que clone o haga fork puede aportar a su propio repo cambiando el destino.
Dos formas de iniciar sesión (sin servidor/backend):
- En GitHub: Settings → Developer settings → OAuth Apps → New OAuth App.
- Application name: OpenCallShield
- Homepage URL:
https://github.com/jhonsu01/OpenCallShield - Authorization callback URL:
https://github.com/jhonsu01/OpenCallShield(no se usa en Device Flow)
- Tras crearla, en la página de la app marca Enable Device Flow y guarda.
- Copia el Client ID (es público, no es secreto).
- En la app → pestaña Cuenta → pega el Client ID y pulsa Iniciar sesión con GitHub.
Sigue el código en
github.com/login/device.
El Client ID puede fijarse por defecto en
SettingsStore.DEFAULT_CLIENT_ID(app/src/main/java/com/opencallshield/data/SettingsStore.kt) para que venga precargado.
- GitHub → Settings → Developer settings → Personal access tokens → crea uno con
scope
public_repo. - En la app → pestaña Cuenta → pégalo en "Entrar con token".
El token se guarda cifrado en el dispositivo (EncryptedSharedPreferences); nunca
se sube a ningún sitio salvo a la propia API de GitHub.
Los aportes llegan como Issues con un bloque JSON. Para integrarlos a la base con
un clic, el repo incluye la Action integrate-spam.yml:
- Crea una etiqueta llamada
aprobadoen el repo (una sola vez): Issues → Labels → New label →aprobado. - Revisa el Issue de aporte y, si los números son correctos, aplícale la etiqueta
aprobado. - La Action lee el JSON, lo fusiona en
spam_numbers.json(sin duplicados, sumando reportes), hace commit enmainy cierra el Issue con un comentario de confirmación.
Si prefieres hacerlo a mano: copia el bloque JSON del Issue, pégalo dentro de "numbers"
en spam_numbers.json, actualiza "updated_at" y haz commit con Closes #N.
MIT — ver LICENSE.
OpenCallShield es gratuito y open source. Si te resulta útil, puedes apoyar su desarrollo con una donación:

