An open API service indexing awesome lists of open source software.

https://github.com/pass-with-high-score/blockads-android

Block ads system-wide on Android using local VPN-based DNS filtering. No root needed. No data collection.
https://github.com/pass-with-high-score/blockads-android

adblocker android block-ads blockads dns dns-filter firewall go-mobile golang jetpack-compose kotlin no-root privacy vpn

Last synced: about 1 month ago
JSON representation

Block ads system-wide on Android using local VPN-based DNS filtering. No root needed. No data collection.

Awesome Lists containing this project

README

          



BlockAds


BlockAds is a free, open-source ad blocker for Android.


It blocks ads, trackers, and malware system-wide using local VPN-based DNS filtering — no root required, no data collection.


Built with Jetpack Compose and Material 3 for a modern, premium experience.














Download



Get it on F-Droid








Get it at IzzyOnDroid

---

## Screenshots








---

## Features

* Dual Routing Modes: System-wide ad blocking via VPN (no root needed) OR Root Proxy Mode (via iptables)
* Privacy-first Optional Crash Reporting & Manual Local Logs Export
* Comprehensive Onboarding Flow (Permissions, Battery Optimization, Opt-in telemetry)
* WireGuard Profile Import
* HTTPS Filtering with userspace TCP/IP stack — per-app MITM, cosmetic CSS, JS scriptlets
* CA cert install verification (auto-refresh after returning from Settings)
* 284-domain curated passthrough list keeps banking, payments and gov apps working
* Multiple built-in filter lists (StevenBlack, AdGuard DNS, EasyList, and more)
* Region-aware defaults — auto-enables filters for your language
* Real-time DNS query logs with search & filtering
* Security protection — blocks phishing, malware, and malvertising domains
* Dark / Light / System theme with Material 3 dynamic colors
* 7 accent color options + Material You dynamic theming
* Quick Settings tile & home screen widget
* Custom block/allow rules and whitelisting
* Per-app filtering (bypass VPN for selected apps)
* DNS-over-HTTPS (DoH) support with multiple providers
* Auto-update filter lists on schedule (6h / 12h / 24h / 48h)
* Export / Import settings backup
* Auto-reconnect on boot
* Multi-language support (English, Vietnamese, Japanese, Korean, Chinese, Thai, Spanish)
* 100% local — all data stays on your device

---

## Community

Join our community:
[![Reddit](https://img.shields.io/badge/Reddit-Join%20Community-orange?logo=reddit)](https://www.reddit.com/r/BlockAds/)
[![Telegram](https://img.shields.io/badge/Telegram-Join%20Chat-blue?logo=telegram)](https://t.me/blockads_android)

## Sponsor

If you enjoy BlockAds, consider supporting the project! Your sponsorship helps us maintain and
improve the app.

[![Sponsor](https://img.shields.io/badge/Sponsor-❤️-red?logo=github-sponsors)](https://github.com/sponsors/pass-with-high-score)

## Build Instructions

### Requirements

* [Android Studio](https://developer.android.com/studio) Ladybug or newer
* JDK 17 or higher
* Android SDK 36 (min SDK 24)
* [Go](https://go.dev/doc/install) 1.21 or higher
* [gomobile](https://pkg.go.dev/golang.org/x/mobile/cmd/gomobile)

### Steps

1. Clone the repository:
```bash
git clone https://github.com/pass-with-high-score/blockads-android.git
cd blockads-android
```

2. Initialize gomobile (one-time setup):
```bash
go install golang.org/x/mobile/cmd/gomobile@v0.0.0-20240404231514-09dbf07665ed
export PATH=$PATH:$(go env GOPATH)/bin
gomobile init
```

3. **(Optional)** Build the Go tunnel AAR/JAR (with Android 15 16KB page size support):
```bash
./scripts/build_tunnel.sh
```
Or
```
./gradlew buildGoTunnel
```
*Note: A pre-built version is already included in `app/libs/`.*

4. Open the project in Android Studio

5. Sync Gradle and run the app on a device or emulator

6. Build from command line:
```bash
./gradlew assembleDebug
./gradlew bundleRelease # requires signing key
```

---

## How It Works

BlockAds routes DNS queries locally either through a VpnService (Vpn Mode) or via iptables redirection (Root Proxy Mode). These queries are matched against loaded filter lists using a memory-efficient Trie data structure. Matching queries are blocked locally, while all other traffic passes through normally — no data leaves your device.

When HTTPS Filtering is enabled, a userspace TCP/IP stack (gVisor netstack via tun2socks) terminates each TCP/UDP flow in Go, looks up the owning app UID via Android's `ConnectivityManager.getConnectionOwnerUid()`, and only MITMs flows from selected browsers. Cert-pinned apps and the 284-domain curated passthrough list bypass MITM cleanly. Cosmetic CSS rules and EasyList `##+js(…)` / AdGuard `#%#//scriptlet(…)` scriptlets are injected into HTML responses via a tiny in-memory local asset host.

---

## License

This project is licensed under the **GNU General Public License v3.0**.
You are free to use, modify, and distribute it under the terms of the license.
See the full [LICENSE](LICENSE) file for details.

---

## Credits

* Developed and maintained by [Nguyen Quang Minh](https://github.com/nqmgaming)
* Built with [Jetpack Compose](https://developer.android.com/jetpack/compose), [Koin](https://insert-koin.io/), and [Compose Destinations](https://github.com/raamcosta/compose-destinations)

---

## Contributing

Pull requests and issue reports are welcome.
Help us improve BlockAds!

### Help us translate BlockAds

Want to see BlockAds in your language?
Open an issue or submit a PR with your translations.

---

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=pass-with-high-score/blockads-android&type=Date)](https://www.star-history.com/#pass-with-high-score/blockads-android&Date)