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.
If you enjoy BlockAds, consider supporting the project! Your sponsorship helps us maintain and improve the app.
[!TIP] Historical versions of the Go binary (
tunnel.aar) were committed in the past before being moved to GitHub Releases. To avoid downloading ~1.2GB of old binaries, use blobless clone (--filter=blob:limit=1m) to download only ~20MB.
Clone the repository:
bash
git clone --filter=blob:limit=1m https://github.com/pass-with-high-score/blockads-android.git
cd blockads-android
(Or for a shallow clone: git clone --depth=1 https://github.com/pass-with-high-score/blockads-android.git)
(Optional) Build the Go tunnel AAR/JAR from source (with Android 15 16KB page size support):
bash
./scripts/build_tunnel.sh
# Or
./gradlew -Ptunnel.source=local buildGoTunnel
Note: This is completely optional. Gradle automatically resolves a prebuilt, checksum-pinned tunnel.aar from GitHub Releases by default. You do not need Go or NDK unless you are modifying Go code in tunnel/. See docs/TUNNEL.md.
Open the project in Android Studio
Sync Gradle and run the app on a device or emulator
Build from command line:
bash
./gradlew assembleDebug
./gradlew bundleRelease # requires signing key
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.
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 file for details.
Pull requests and issue reports are welcome.
Help us improve BlockAds!
Want to see BlockAds in your language?
Open an issue or submit a PR with your translations.
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|