English · Español · Português · Français · Deutsch · Русский · 中文 · 日本語 · 한국어
Open source (MIT) Android app that blocks SPAM calls using CallScreeningService
(Android 10+), with a local Room database, a detection rules engine and sync with a
public collaborative list hosted on GitHub.
A privacy-first, decentralized alternative to Truecaller.
- Google Play: https://play.google.com/store/apps/details?id=com.jhonsu01.opencallshield
- Direct APK: download the
.apkfrom Releases.
Screenshots in every language are in playstore/screenshots/.
- Automatic blocking through
CallScreeningService(reject or silence). - Rules engine: known contact → allow; reported number → block; blacklisted prefix → block; number not in contacts → optional.
- Block by country with one tap on the flag (no prefixes to type).
- Local Room database of reported numbers.
- Sync with a public JSON on GitHub (daily via WorkManager + manual).
- Reports and history of filtered calls (add / remove numbers with one tap).
- 9 languages: English, Español, Português, Français, Deutsch, Русский, 中文, 日本語, 한국어 — pick one from the 🌐 icon in the app or from Android's per-app language settings.
- UI in Jetpack Compose (Material 3).
Kotlin · Jetpack Compose (Material 3) · Room · WorkManager · AppCompat (per-app language) · MVVM · CallScreeningService · targetSdk 36 (Android 16)
# Requires JDK 17 and the Android SDK (compileSdk 36)
./gradlew assembleDebug # installable debug APK
./gradlew assembleRelease # release APK (needs signing)
./gradlew bundleRelease # AAB for Google PlayOutputs are in app/build/outputs/.
- Install the app.
- Grant the contacts permission (so your contacts are never blocked).
- Tap "Set as call screening app" and accept the role in Android.
- Adjust the rules, pick countries to block and/or sync the collaborative list.
The app syncs from spam_numbers.json in this repository:
https://raw.githubusercontent.com/jhonsu01/OpenCallShield/main/spam_numbers.json
Format:
{
"version": "1.0",
"updated_at": "2026-01-01",
"numbers": [
{ "number": "+1234567890", "reports": 120, "tag": "scam" }
]
}The URL can be changed from the app (Advanced settings), so anyone can run their own list (guide, in Spanish).
From ⋮ → Collaborate you can sign in with GitHub and then, in SPAM list, tap
"Contribute to the public database": the app opens an Issue in this repo with your
reported numbers as JSON, ready to merge into spam_numbers.json. Signing in is optional:
the app works fully without it.
Two ways to sign in (no server/backend):
- On GitHub: Settings → Developer settings → OAuth Apps → New OAuth App, then enable Device Flow.
- Copy the Client ID (it is public, not a secret).
- In the app → Collaborate → paste the Client ID, tap Connect and enter the code
at
github.com/login/device.
- GitHub → Settings → Developer settings → Personal access tokens → create one with
the
public_reposcope. - In the app → Collaborate → paste it and tap Connect with token.
The token is stored encrypted on the device (EncryptedSharedPreferences) and is only
sent to the GitHub API.
Contributions arrive as Issues with a JSON block. Copy the numbers into
spam_numbers.json, update "updated_at" and commit with Closes #N.
MIT — see LICENSE. Privacy policy: PRIVACY.md.
OpenCallShield is free and open source. If you find it useful, you can support its development:






