{"id":44364769,"url":"https://github.com/pass-with-high-score/blockads-android","last_synced_at":"2026-05-02T05:16:23.534Z","repository":{"id":337555414,"uuid":"1154162014","full_name":"pass-with-high-score/blockads-android","owner":"pass-with-high-score","description":"Block ads system-wide on Android using local VPN-based DNS filtering. No root needed. No data collection.","archived":false,"fork":false,"pushed_at":"2026-03-27T10:01:12.000Z","size":406964,"stargazers_count":369,"open_issues_count":17,"forks_count":17,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-27T16:49:38.943Z","etag":null,"topics":["adblocker","android","block-ads","blockads","dns","dns-filter","firewall","go-mobile","golang","jetpack-compose","kotlin","no-root","privacy","vpn"],"latest_commit_sha":null,"homepage":"https://blockads.pwhs.app","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pass-with-high-score.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["pass-with-high-score"],"buy_me_a_coffee":"nguyenquane"}},"created_at":"2026-02-10T04:35:15.000Z","updated_at":"2026-03-27T10:01:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pass-with-high-score/blockads-android","commit_stats":null,"previous_names":["pass-with-high-score/blockads-android"],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/pass-with-high-score/blockads-android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Fblockads-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Fblockads-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Fblockads-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Fblockads-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pass-with-high-score","download_url":"https://codeload.github.com/pass-with-high-score/blockads-android/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Fblockads-android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adblocker","android","block-ads","blockads","dns","dns-filter","firewall","go-mobile","golang","jetpack-compose","kotlin","no-root","privacy","vpn"],"created_at":"2026-02-11T18:18:24.450Z","updated_at":"2026-05-02T05:16:23.527Z","avatar_url":"https://github.com/pass-with-high-score.png","language":"Kotlin","funding_links":["https://github.com/sponsors/pass-with-high-score","https://buymeacoffee.com/nguyenquane"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e      \n  \u003cimg src=\"fastlane/metadata/android/en-US/images/icon.png\" width=\"128\" height=\"128\"\u003e\n  \u003ch1\u003eBlockAds\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eBlockAds\u003c/strong\u003e is a free, open-source ad blocker for Android.\u003c/p\u003e\n\u003cp\u003eIt blocks ads, trackers, and malware system-wide using local VPN-based DNS filtering — no root required, no data collection.\u003c/p\u003e\n\u003cp\u003eBuilt with Jetpack Compose and Material 3 for a modern, premium experience.\u003c/p\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://github.com/pass-with-high-score/blockads-android/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/pass-with-high-score/blockads-android\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/pass-with-high-score/blockads-android/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/pass-with-high-score/blockads-android/total\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ch4\u003eDownload\u003c/h4\u003e\n  \u003ca href=\"https://f-droid.org/packages/app.pwhs.blockads\"\u003e\n    \u003cimg src=\"https://fdroid.gitlab.io/artwork/badge/get-it-on.png\" height=\"80\" alt=\"Get it on F-Droid\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/pass-with-high-score/blockads-android/releases\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/NeoApplications/Neo-Backup/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png\" height=\"80\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n    \u003ca href=\"https://apt.izzysoft.de/packages/app.pwhs.blockads\"\u003e\n    \u003cimg src=\"https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroidButtonGreyBorder_nofont.png\" height=\"54\" alt=\"Get it at IzzyOnDroid\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e \n\n---  \n\n## Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/1.png\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/2.png\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/3.png\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/4.png\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/5.png\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/6.png\" width=\"200\"\u003e\n\u003c/div\u003e\n\n---\n\n## Features\n\n* Dual Routing Modes: System-wide ad blocking via VPN (no root needed) OR Root Proxy Mode (via iptables)\n* Privacy-first Optional Crash Reporting \u0026 Manual Local Logs Export\n* Comprehensive Onboarding Flow (Permissions, Battery Optimization, Opt-in telemetry)\n* WireGuard Profile Import\n* HTTPS Filtering with userspace TCP/IP stack — per-app MITM, cosmetic CSS, JS scriptlets\n* CA cert install verification (auto-refresh after returning from Settings)\n* 284-domain curated passthrough list keeps banking, payments and gov apps working\n* Multiple built-in filter lists (StevenBlack, AdGuard DNS, EasyList, and more)\n* Region-aware defaults — auto-enables filters for your language\n* Real-time DNS query logs with search \u0026 filtering\n* Security protection — blocks phishing, malware, and malvertising domains\n* Dark / Light / System theme with Material 3 dynamic colors\n* 7 accent color options + Material You dynamic theming\n* Quick Settings tile \u0026 home screen widget\n* Custom block/allow rules and whitelisting\n* Per-app filtering (bypass VPN for selected apps)\n* DNS-over-HTTPS (DoH) support with multiple providers\n* Auto-update filter lists on schedule (6h / 12h / 24h / 48h)\n* Export / Import settings backup\n* Auto-reconnect on boot\n* Multi-language support (English, Vietnamese, Japanese, Korean, Chinese, Thai, Spanish)\n* 100% local — all data stays on your device\n\n---  \n\n## Community\n\nJoin our community:  \n[![Reddit](https://img.shields.io/badge/Reddit-Join%20Community-orange?logo=reddit)](https://www.reddit.com/r/BlockAds/)\n[![Telegram](https://img.shields.io/badge/Telegram-Join%20Chat-blue?logo=telegram)](https://t.me/blockads_android)\n\n## Sponsor\n\nIf you enjoy BlockAds, consider supporting the project! Your sponsorship helps us maintain and\nimprove the app.\n\n[![Sponsor](https://img.shields.io/badge/Sponsor-❤️-red?logo=github-sponsors)](https://github.com/sponsors/pass-with-high-score)\n\n## Build Instructions\n\n### Requirements\n\n* [Android Studio](https://developer.android.com/studio) Ladybug or newer\n* JDK 17 or higher\n* Android SDK 36 (min SDK 24)\n* [Go](https://go.dev/doc/install) 1.21 or higher\n* [gomobile](https://pkg.go.dev/golang.org/x/mobile/cmd/gomobile)\n\n### Steps\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/pass-with-high-score/blockads-android.git \n   cd blockads-android \n   ```\n\n2. Initialize gomobile (one-time setup):\n   ```bash\n   go install golang.org/x/mobile/cmd/gomobile@v0.0.0-20240404231514-09dbf07665ed\n   export PATH=$PATH:$(go env GOPATH)/bin\n   gomobile init\n   ```\n\n3. **(Optional)** Build the Go tunnel AAR/JAR (with Android 15 16KB page size support):\n   ```bash\n   ./scripts/build_tunnel.sh\n   ```\n   Or\n    ```\n   ./gradlew buildGoTunnel\n   ```\n   *Note: A pre-built version is already included in `app/libs/`.*\n\n4. Open the project in Android Studio\n\n5. Sync Gradle and run the app on a device or emulator\n\n6. Build from command line:\n   ```bash\n   ./gradlew assembleDebug\n   ./gradlew bundleRelease   # requires signing key\n   ```\n\n---  \n\n## How It Works\n\nBlockAds 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.\n\nWhen 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.\n\n---  \n\n## License\n\nThis project is licensed under the **GNU General Public License v3.0**.  \nYou are free to use, modify, and distribute it under the terms of the license.  \nSee the full [LICENSE](LICENSE) file for details.\n\n---  \n\n## Credits\n\n* Developed and maintained by [Nguyen Quang Minh](https://github.com/nqmgaming)\n* Built with [Jetpack Compose](https://developer.android.com/jetpack/compose), [Koin](https://insert-koin.io/), and [Compose Destinations](https://github.com/raamcosta/compose-destinations)\n\n---  \n\n## Contributing\n\nPull requests and issue reports are welcome.  \nHelp us improve BlockAds!\n\n### Help us translate BlockAds\n\nWant to see BlockAds in your language?  \nOpen an issue or submit a PR with your translations.\n\n---\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=pass-with-high-score/blockads-android\u0026type=Date)](https://www.star-history.com/#pass-with-high-score/blockads-android\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpass-with-high-score%2Fblockads-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpass-with-high-score%2Fblockads-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpass-with-high-score%2Fblockads-android/lists"}