Edsuns
AdblockAndroid
JavaScript

A adblock engine (ad filter) library for Android WebView

Last updated Jun 13, 2026
88
Stars
34
Forks
6
Issues
0
Stars/day
Attention Score
27
Language breakdown
JavaScript 73.4%
Kotlin 23.8%
C++ 2.3%
CMake 0.5%
โ–ธ Files click to expand
README

AdblockAndroid

English | ็ฎ€ไฝ“ไธญๆ–‡

A lightweight and efficient adblock engine library for Android, which has strong compatibility for filters like EasyList and AdGuard Filters.

The native C++ code is based on brave/ad-block. Beyond adapting it to Android platform, I fixed some fatal issues (d85d341, 583f87a), made 40x better parsing performance (ab18236, a0009c8) and implemented some new features.

Features

Tech Stack

  • Android
  • Kotlin
  • C++
  • JavaScript
  • JNI

Demo

See releases and the code in app/src.

Get Started

Note: This development requires you to have fundamental Android WebView experience.

Note: A full application example can be found in :app module.

1. Gradle Configuration

Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Add the dependency:

dependencies {
    implementation 'com.github.Edsuns.AdblockAndroid:ad-filter:1.0'
}

2. Coding

Add the code in your Application class

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        // Debug configuration.
        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        }
        // Start adfilter.
        val filter = AdFilter.create(this)
    }
}

Add the code in your WebChromeClient class

class WebClient(private val webViewClientListener: WebViewClientListener) : WebViewClient() {

private val filter = AdFilter.get()

override fun shouldInterceptRequest( view: WebView?, request: WebResourceRequest? ): WebResourceResponse? { val result = filter.shouldIntercept(view!!, request!!) return result.resourceResponse }

override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { filter.performScript(view, url) } }

Add the code in your Activity class

class MainActivity : AppCompatActivity(), WebViewClientListener {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root)

val filter = AdFilter.get() val filterViewModel = filter.viewModel

// Setup AdblockAndroid for your WebView. filter.setupWebView(binding.webView)

// Add filter list subscriptions on first installation. if (!filter.hasInstallation) { val map = mapOf( "AdGuard Base" to "https://filters.adtidy.org/extension/chromium/filters/2.txt", "EasyPrivacy Lite" to "https://filters.adtidy.org/extension/chromium/filters/118_optimized.txt", "AdGuard Tracking Protection" to "https://filters.adtidy.org/extension/chromium/filters/3.txt", "AdGuard Annoyances" to "https://filters.adtidy.org/extension/chromium/filters/14.txt", "AdGuard Chinese" to "https://filters.adtidy.org/extension/chromium/filters/224.txt", "NoCoin Filter List" to "https://filters.adtidy.org/extension/chromium/filters/242.txt" ) for ((key, value) in map) { val subscription = filterViewModel.addFilter(key, value) filterViewModel.download(subscription.id) } }

filterViewModel.onDirty.observe(this, { // Clear cache when there are changes to the filter. // You need to refresh the page manually to make the changes take effect. binding.webView.clearCache(false) }) } }

Congratulations, great success!

Thanks To

ยฉ 2026 GitRepoTrend ยท Edsuns/AdblockAndroid ยท Updated daily from GitHub