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.
- Host: GitHub
- URL: https://github.com/pass-with-high-score/blockads-android
- Owner: pass-with-high-score
- License: gpl-3.0
- Created: 2026-02-10T04:35:15.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-27T10:01:12.000Z (3 months ago)
- Last Synced: 2026-03-27T16:49:38.943Z (3 months ago)
- Topics: adblocker, android, block-ads, blockads, dns, dns-filter, firewall, go-mobile, golang, jetpack-compose, kotlin, no-root, privacy, vpn
- Language: Kotlin
- Homepage: https://blockads.pwhs.app
- Size: 388 MB
- Stars: 369
- Watchers: 3
- Forks: 17
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
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
---
## 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:
[](https://www.reddit.com/r/BlockAds/)
[](https://t.me/blockads_android)
## Sponsor
If you enjoy BlockAds, consider supporting the project! Your sponsorship helps us maintain and
improve the app.
[](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
[](https://www.star-history.com/#pass-with-high-score/blockads-android&Date)