Threads Hide Ads

Removes sponsored feed insertions from the official Threads Android app. Advertisements are dropped at the feed cache boundary, before a sponsored label ever reaches the view hierarchy.

An advertisement is recognized by its feed unit type. Threads tags every feed item with a unit-type enum whose constants keep readable names even in an obfuscated build, and its advertisement values are matched whole:

AD, AD4AD, INTENT_AWARE_AD_PIVOT, STAND_ALONE_MULTI_AD_PIVOT,
ADS_FEEDBACK_INTERFACE and its two variants

Recommendation units, such as the NETEGO and SUGGESTED families, are deliberately left in place.

Scope

The module hooks only:

com.instagram.barcelona

Select Threads as the module's only scope. Do not add other applications.

Requirements

  • A rooted device with an Xposed framework — LSPosed or Vectoror a non-rooted device using LSPatch. This module uses the legacy de.robv.android.xposed API, so both legacy and modern frameworks can load it.
  • Android 6.0 (API 23) or newer.
  • The official Threads application (com.instagram.barcelona).

Installation

  1. Install the APK from the release attached to this repository.
  2. Enable Threads Hide Ads in the manager.
  3. Select Threads as the module's only scope.
  4. Force-stop Threads once, then reopen it.
  5. Log entries are tagged:
ThreadsHideAds:

Non-rooted devices (LSPatch)

The module makes no root-only calls, so LSPatch can embed it directly into Threads:

  1. Install the LSPatch manager, or use the LSPatch command-line jar.
  2. Patch Threads with Threads Hide Ads selected as an embedded module. Patch the base APK together with all of its split APKs.
  3. Uninstall the store copy of Threads, then install the patched APKs as a set. The patched build is signed with LSPatch's key, so it cannot be installed over the store copy.

Both LSPatch modes work: embedded (portable) mode injects the module into the APK so no manager or background service is needed afterwards, and local mode keeps the module managed by LSPatch and works alongside Shizuku.

Patching was confirmed with LSPatch v1.2, which embeds the module and its DexKit native library and re-signs every split without error. Running the patched build was reported working by a user in both modes; the maintainer's own testing is done under LSPosed.

How it works

Threads frequently changes obfuscated class and method names, so the module uses several independent layers.

Discovery is deferred behind an Application.attach() guard rather than running DexKit immediately from handleLoadPackage(), so Threads has supplied its real application context and final class loader first. DexKit then searches for the confirmed feed-boundary shape using the Sponsored marker and a (Integer/int, Integer/int, List) -> non-void signature. A class-loader scan is preferred, with the base APK path as a fallback when the loader cannot be opened. When exactly one primary boundary is found it is installed and the expensive broad discovery pass is skipped; broad marker discovery remains as an app-update fallback.

Failed or zero-hook initialization attempts are retried after 250 ms, 1 second and 3 seconds, and the initialized state is committed only after at least one model hook is actually installed.

Feed lists are sanitized in place when mutable; replacements are used only where the caller, result, field, map entry, list slot or array slot can actually be updated. Mutable arguments are sanitized again after execution to catch late insertion, without falsely reporting immutable lists as changed. Collection fields inside returned feed-wrapper objects are sanitized with bounded recursion.

A Pando layer additionally filters the list accessors on com.facebook.pando.TreeJNI, selected by shape. Their names come from the native binding rather than from the obfuscator, so that layer needs neither DexKit nor its native library and stays installed when either fails.

A UI fallback collapses a feed card when a localized sponsored label is rendered, after revalidating the marker at callback execution time. It tracks the exact label view that hid each card, which prevents caption, author, timestamp or engagement updates from accidentally restoring a sponsored card; a card is restored only when that original label view is rebound for a recycled organic item.

On Threads 445.0.0.46.83 the removals occur at:

BarcelonaFeedCache.A0G(X.0nD, Integer, String, String, List, X.2cx, Function3, boolean)

Validation

Measured on a Pixel 8 Pro against Threads 445.0.0.46.83: advertisements are removed at the cache boundary, no sponsored label reaches the view hierarchy, and the feed renders normally.

Troubleshooting

Problem Suggested action
Sponsored posts still appear Confirm that only Threads is selected in the scope, and check whether the log reports Hook initialization complete.
Initialization attempt failed Keep Threads open for several seconds while the automatic retries run, then export the ThreadsHideAds: log if all retries are exhausted.
No module log entries Verify the module is enabled, force-stop Threads once, and check the framework status.
Ambiguous method warning The installed Threads build may contain multiple possible targets. Do not force a broad hook; report the relevant log output.
Hook failure after an update Threads may have changed its internal classes or method signature. Capture the ThreadsHideAds: log entries and open an issue.

Credits

Project Contribution
DexKit by LuckyPray Runtime DEX parsing and discovery of obfuscated classes and methods. Apache-2.0.
LSPosed The Android runtime hooking framework used to load and execute this module. GPL-3.0.
ReVanced-family Threads patches The maintained method-signature reference used to update the sponsored-content hook.

The module is derived from the GPL-3.0 Threads ad-removal concept and has been updated for the newer sponsored-content insertion method.

Disclaimer

Not affiliated with, endorsed by, or sponsored by Meta or Threads. The module modifies the app's behaviour in memory on the user's own device; it does not redistribute the Threads APK, and it transmits nothing off the device. Provided for educational and personal use. App updates may break the hook without notice.

Releases

1.2.1

Stable

9/9/2026, 1:38:11 PM

First release in the Xposed Module Repository.

Removes sponsored feed items from the Threads Android app, matching an advertisement by its feed unit type and leaving recommendation units such as the NETEGO and SUGGESTED families in place. Works under LSPosed, Vector, or LSPatch.

The application ID is io.github.mrxsin.threadshideads. If you previously installed a build under the old my.github.MrxSiN prefix, this installs alongside it rather than upgrading it, so uninstall the old copy.

Assets

1