AmznKiller

Hide ads and sponsored content in the Amazon Shopping Android app.

Android 10+ libxposed API 101 Release Build

Features

  • Strips sponsored cards, video carousels, and ad slots from the Amazon app
  • Bundled selector list with remote sync, custom URL, and CSS-injection sanitization
  • Price history charts on product pages via Keepa and CamelCamelCamel (US, UK, DE, FR, JP, CA, IT, ES, IN, MX, BR, AU)
  • Optional Force Dark for the Amazon UI (experimental, see below)
  • Material 3 Expressive settings UI in Jetpack Compose
  • Free and open source (FOSS)

Requirements

  • Android 10 (API 29) or higher
  • LSPosed Manager with libxposed API 101 support
  • Amazon Shopping (com.amazon.mShop.android.shopping)

Install

  1. Grab the APK:

    GitHub Releases Obtainium

  2. Enable the module in LSPosed and scope it to com.amazon.mShop.android.shopping.

  3. Open the AmznKiller app to confirm the module is active and refresh selectors.

  4. Force-stop Amazon Shopping and relaunch.

Screenshots

Search query: "macbook air m1 16gb 512"

Stock (2 real results, rest are ads) Patched
Stock Amazon app Patched Amazon app
Force Dark Price History
Force Dark mode Price history charts
Dashboard Selectors Settings Settings (bottom)

Force Dark

Amazon disables Android force dark via forceDarkAllowed=false in its theme. The module hooks ViewRootImpl.determineForceDarkType and forces the return to FORCE_DARK_ALWAYS, triggering GPU-level darkening across native views and WebViews. Extra hooks paint window backgrounds dark and block white-flash on WebView load. DarkModeInjector ships CSS overrides for elements the algorithm gets wrong.

determineForceDarkType was introduced in Android 15 (API 35). On Android 10-14 the primary hook does not apply. A fallback on HardwareRenderer.setForceDark is attempted but Amazon's theme opt-out blocks darkening on those versions.

Disabled by default. Enable in settings if on Android 15+.

Troubleshooting

  1. Confirm the module is enabled in LSPosed and scoped to Amazon Shopping.
  2. Force stop Amazon Shopping and reopen.
  3. Check the AmznKiller dashboard: Xposed must be active and selector count above 0.
  4. Tap refresh. If it fails, reset the selector URL in settings.
  5. If pages render broken, disable CSS injection, refresh selectors, then re-enable.

This is cosmetic blocking only. Network requests still happen. Pair with DNS-based blockers (AdGuard, NextDNS, Pi-hole) for full coverage.

Build

git clone https://github.com/hxreborn/amznkiller.git
cd amznkiller
./gradlew :app:assembleDebug

Requires JDK 21 and Android SDK. Configure local.properties:

sdk.dir=/path/to/android/sdk

# Optional: release signing
RELEASE_STORE_FILE=<path/to/keystore.jks>
RELEASE_STORE_PASSWORD=<store_password>
RELEASE_KEY_ALIAS=<key_alias>
RELEASE_KEY_PASSWORD=<key_password>

Contributing

See CONTRIBUTING.md. For bugs or feature requests, open an issue.

License

GPLv3

GPL v3.0. See LICENSE.

Releases

v2.2.0

Stable

5/14/2026, 9:26:11 AM

What's Changed

Features

Refactor

CI/CD

Miscellaneous

Assets

1

v2.3.0

Stable

5/28/2026, 6:08:28 AM

What's Changed

Features

Bug Fixes

  • e0be6de (hook) Force dark tab icon tinting could cause rendering glitches by @hxreborn

  • 352b79d (ui) Refresh button reflects loading and error by @hxreborn

  • 80fad20 (ui) Apply navigation bar insets to bottom nav by @hxreborn

  • a99398c Settings save gracefully even when Xposed service is unavailable by @hxreborn

  • 45b73a4 Module settings could be stale or ignored on first hook load by @hxreborn

  • d56442d Verbose logging toggle now takes effect without restarting the app by @hxreborn

Performance Improvements

  • 468886d Skip debug string construction when verbose logging is off by @hxreborn

Refactor

Miscellaneous

Assets

1

v2.1.0

Stable

4/25/2026, 5:08:47 PM

What's Changed

Added

Fixed

Changed

Other

Assets

1

v2.0.1

Stable

4/3/2026, 9:48:15 PM

What's Changed

Fixed

  • 0b18141 - (charts) Show charts on cart product links by @hxreborn

    Fix a bug where price charts did not appear when opening products from the cart.

  • ba8a66b - (ui) Keep splash until settings state is ready by @hxreborn

Changed

  • 05db728 - (ui) Split screen state and extract dashboard/settings components by @hxreborn

  • 64f0a94 - (ui) Remove selector bottom sheet from dashboard by @hxreborn

New Contributors

Assets

1

v2.0.0

Stable

3/18/2026, 4:48:26 PM

What's Changed

Added

  • 8006a71 - Migrate to libxposed API 101 [breaking] by @hxreborn in #14

    Migrates from libxposed API 100 to 101. API 100 will no longer be supported once 101 is officially released. An LSPosed Manager with API 101 support may not be publicly available yet.

Other

Assets

1

v1.2.3

Stable

3/16/2026, 11:19:48 AM

What's Changed

Added

Fixed

  • 31a4695 - (charts) Re-inject price charts on SPA variant navigation by @hxreborn

    • price charts now update when switching product variants (e.g. size/color)
  • 21064f2 - (selectors) Hide homepage video/creative ad cards by @hxreborn

    • fixes empty space left behind when inner ad content was already hidden

Other

Assets

1

v1.2.2

Stable

2/28/2026, 7:57:35 AM

What's Changed

Added

Fixed

  • 009ef83 - (charts) Prevent injection inside buybox swatch buttons by @hxreborn

    price charts were rendering inside the one-time purchase tab card on subscribe & save products

    Fixes #11

Changed

Other

Assets

1

v1.2.1

Stable

2/27/2026, 8:06:26 AM

What's Changed

Fixed

  • 8317698 - (xposed) Stop writing to read-only remote prefs in hooked process by @hxreborn

    • Fixes UnsupportedOperationException on every Amazon app launch when selectors are stale

    Closes #10

Assets

1

v1.2.0

Stable

2/15/2026, 4:48:17 PM

What's Changed

Added

  • ec50887 - Add Amazon India package support by @hxreborn

    • Module now hooks both com.amazon and in.amazon Shopping apps

    Fixes #8

Changed

  • ca908b1 - (scripts) Stop writing embedded.css from update_selectors by @hxreborn

    • embedded.css is now hand-maintained, not auto-generated
    • the script only produces lists/generated/merged.txt (the remote list)
    • CI workflows no longer validate or diff-check embedded.css

Other

New Contributors

  • @github-actions[bot] made their first contribution in #7

Assets

1

v1.1.0

Stable

2/15/2026, 12:37:19 AM

What's Changed

Added

  • 08b0665 - Initial price history charts and experimental force dark mode by @hxreborn

    • Keepa and CamelCamelCamel chart embeds on product pages (12 locales)
    • Force dark overrides Amazon's forceDarkAllowed=false via framework hooks
    • Both features default to disabled

Fixed

  • c06a374 - (ui) Correct license screen wording by @hxreborn

  • 8eeefea - (xposed) Pass classLoader to ForceDarkHooker.hook by @hxreborn

  • 203fa82 - (xposed) Make bottom nav icons visible under GPU force dark by @hxreborn

    • Hook getTabIcon on Base/SavX/SwitcherTabController to tint icons grey (168,168,168) so GPU force dark inverts them to near-white
    • Guard against tint and drawable resets with TintListGuard and DrawableChangeGuard
    • Drop redundant ForceDarkOverrideHooker since determineForceDarkType ALWAYS mode ignores per-view opt-out
    • Remove dead safeIdName extension
    • Extract hookMethod helper to deduplicate hook registration
  • 141b2c9 - Close resource leak in embedded selector loader by @hxreborn

Changed

Other

  • df75ebd - Release v1.1.0 by @hxreborn

  • 225f915 - Add organization options to issue templates by @hxreborn

    • Add price charts and dark theme issue type options to bug report template
    • Add tracking issue links to config
    • Standardize environment fields (device, android, module version) across templates
    • Add location options for order history, account pages, price charts
  • 1cfb5c6 - Assorted build and resource fixes by @hxreborn

    • Move embedded.css to payload/css/ subdirectory
    • Fix snackbar format string from %s to %d for rule count
    • Add dark background CSS rules to dark_mode.js for navigation flash
    • Suppress UnstableApiUsage warnings in Gradle scripts
    • Add SuppressLint for LocalContextGetResourceValueCall in RulesBottomSheet
    • Rewrite Force Dark FAQ section in README
    • Add Known Issues section to README
  • 130cd09 - Remove unreferenced local screenshot assets by @hxreborn

Assets

1

v1.0.0

Stable

2/11/2026, 7:42:06 AM

Initial release.

For previous changelog, see pre-releases.

What's Changed

Added

  • 14000ac - (ui) Add animated splash screen by @hxreborn

  • 00bbb8e - Add ghost state to metrics grid when injection is disabled by @hxreborn

    • Left card shows pause icon and "Injection paused"
    • Right card dims and disables click
  • b89fe37 - Persist refresh failure state and use string resources for error messages by @hxreborn

    • Dashboard shows error state after app restart if last sync failed
    • Error messages use string resources instead of hardcoded text

Fixed

  • 0772e25 - (hook) Skip toast when amazon starts in bg by @hxreborn

    process restarts from push/content-provider trigger onPackageLoaded without the app being visible

  • 7e2a51e - (util) Add missing XposedModule import by @hxreborn

  • 6c5e46b - Split Logger into debug and info tiers by @hxreborn

    • Boot and error logs always emit
    • Runtime verbosity respects the debug logs toggle
  • b178a48 - Gate WebView debugging on WEBVIEW_DEBUGGING pref by @hxreborn

    • Toggle in settings now actually controls WebView debugging
    • Requires force stopping Amazon to take effect
  • ac658e9 - Replace report-issue icon with Feedback by @hxreborn

Changed

  • b7192d5 - Simplify toast logic in AmznkillerModule by @hxreborn

    • Flattened nested reflection blocks
    • Removed redundant process check
  • 501b058 - Reduce StyleInjector.inject() complexity by @hxreborn

    • Split into smaller focused methods
    • Clearer field and class names
    • Comments for non-obvious logic
  • 7c2d77c - Improve ShapeUtil readability and TimeFormat granularity by @hxreborn

    • Named corner params instead of positional
    • Finer relative time buckets under 1 minute
    • Day-level relative time before falling back to date
  • 132e7f4 - Simplify dashboard state, remove dead code, reorganize packages by @hxreborn

    • Removed unused frameworkPrivilege field
    • Simplified UpdatesCard with local status enum
    • Moved ViewModel and UiState to shared packages

Other

Assets

1