Global Icon Pack

An Xposed module for applying icon packs globally

GitHub Repo stars
IzzyOnDroid

Some launchers support icon packs, however the icons are usually inconsistent across the whole system. For example, the Settings page and the Recent Apps screen may retain the default icons.
This module is designed to extend the icon packs throughout the entire system.

Get it on IzzyOnDroid

Preview

Requirements

  • LSPosed
  • Android 8.1+ (I tested on Android 14, 15. @Mickmick21 tested on Android 10, 12L.)
  • Some features require AOSP-like OS

Installation

  1. Install the apk.
  2. Select apps in lsposed. It should work for most apps/launchers , depending on the api they use.
  3. Open Global Icon Pack, choose an icon pack.
  4. Open the three dot menu, click each of Restart xxx.

Notes

Modes

  • Use share mode whenever possible. The provider mode serves as a fallback if share mode doesn't work. Local mode is only reserved for testing and you can't use icon variants with this mode (However it maybe faster if there are only a few icon records).
  • If you are using share mode, after uninstallation, you must remove /data/misc/com.richardluo.globalIconPack/iconPack.db manually.
  • Sometimes system update may reset the permissions of share mode database. It is recommended that you deselect apps in LSPosed, after the update, select them again, and open GIP at least once (to setup the permissions), then click each of Restart xxx.
  • System update may also break the splash screen. The icons on it may be so large that they appear to be clipped. Go to lsposed, locate System UI, long press it and select reoptimize, then restart System UI. The splash screen should return to normal.

Tips

  • You can long press icon in icon chooser bottom sheet to try as calendar icon.
  • In icon variant, the option Modified indicates that you have made changes to the icon variants. If enabled, when the icon pack updates, it will only add new icons instead of replacing all icons. Note that this could cause issues if any icon entry is missing in the new version!

Launcher 3

  • If you are using a different launcher3 based launcher, please input its package name into the launcher package name in pixel settings. If it is not launcher3 based, some functions may not work.
  • Recent screen will use your default launcher unless you use quickswitch, so you will need to select pixel launcher for that to work.
  • Pixel launcher saves its icon database in /data/data/com.google.android.apps.nexuslauncher/databases/app_icons.db.

For icon pack developers

  • You can create a shortcut record by appending @ to the end of package name, and shortcut id as classname.

Known Issues

  • If the launcher is slow to boot or crashes, switch to 'local' mode.
  • If it says "Please ensure the Xposed module has been enabled first" and you have the module enabled already, try to force stop then restart the app.
  • Regardless of the minimum SDK version, you must test compatibility with android versions below 14 by yourself.

Help with Localization

Crowdin | Agile localization for tech companies

Main Translators

The list may not be latest.

  • Chinese Simplified
    • RichardLuo
  • German
    • elisenlebkuch
    • Max
  • Russian
    • Кирилл Гук
    • Artem Dreznel
  • Chinese Traditional
    • Jia-Bin
  • Turkish
    • Holi
  • French
    • MickMick21
    • Jules
  • Portuguese
    • Cauã

Disclaimer

Warning

  • Please note that this module may not be fully compatible with all custom ROMs.
  • I do not take any responsibility for any damage or issues that may occur to your device.

Releases

0.5.9

Stable

5/17/2026, 12:17:47 PM

Added Ukrainian and a bit of Polish translation

🐛 Fixes

  • fix: update hooks for android 16
  • refactor: utils withHighByte and isHighByte
  • fix: try hook ShadowGenerator even if the previous hook fails
  • revert: unfinished

💬 Other

  • build: upgrade ci

Assets

1

0.5.8

Stable

3/25/2026, 2:31:37 PM

🚀 Features

  • feat: hook system framework to access all apps from all users
  • feat: transition between content and loading circle

🐛 Fixes

  • fix: navkey needs to be Serializable

💬 Other

  • docs: README.md
  • build: use actions/checkout@v6

Assets

1

0.5.7

Pre-release

3/19/2026, 4:11:35 PM

🚀 Features

  • feat: settings will stay locked after reopen
  • feat: mask for import/export fab
  • feat: close search bar when unfocused and search text is empty
  • feat: close search bar when unfocused and search text is empty
  • feat: navigation3

🐛 Fixes

  • refactor: move emptyImageHolder to IconCache
  • fix: slider is clickable even if it is disabled
  • fix: the whole row is clickable in icon chooser
  • fix(IconChooserSheet): focus on search bar when expanded
  • perf: improved LazyImage
  • fix: limit suggested icons size
  • perf: better icon cache performance
  • refactor: onBack should be inside AppIconListPage
  • perf: grid performance
  • fix: hooked apps should open db as readonly
  • fix: content padding in icon variant activity
  • refactor: remove chain util function
  • fix: scrolling is slow when search bar opens
  • fix: prevent search bar from refocus under some circumstance
  • fix: icon variant can not choose icons from other pack
  • revert: default share db path
  • refactor: when failed to hook, revert all hooks

💬 Other

  • chore: update libs
  • chore: upgrade dependency
  • chore: add gip fix permission magisk module

Assets

1

0.5.6

Stable

2/6/2026, 1:12:57 PM

🚀 Features

  • feat: update db if icon pack is updated
  • feat: preference lock

🐛 Fixes

  • fix: possible memory leak if fallback ComponentName is added inside getOrPut()
  • perf: use Sequence instead of List and support service info and provider info
  • fix: some apps think a valid id must be greater than 0
  • perf: avoid icons from flickering when going back from app list page

💬 Other

  • chore: upgrade dependency
  • build: fix printVersion
  • chore: do not log without actual updates

Assets

1

0.5.5

Stable

12/13/2025, 10:57:27 AM

🐛 Fixes

  • perf(IconPackCreator): move appfilterXML to IconPackApkBuilder; add id map to avoid duplicate copy drawable
  • fix: parseXML does not correctly read xml under assets
  • fix: icons have black background in android 16 qpr2
  • perf: do not try to run 16 qpr2 hooks on pre 16
  • fix: wrong getIconOptionsClass
  • fix: a better run if
  • fix: oops! change drawFullBleed instead of isFullBleed
  • fix: CalendarAndClockHook on android 16 QPR2
  • fix: if a calendar icon entry has been set, skip it
  • fix(ClockDrawableWrapper): continue to try next one if first one failed
  • perf: a better way to fake clock metadata
  • fix(MainActivity): wider navigation bar
  • fix: reset db permission to nobody so permission has to be 0666

💬 Other

  • docs: update license
  • docs: update license

Assets

1

0.5.4

Stable

11/24/2025, 1:37:03 PM

🐛 Fixes

  • fix: BypassQueryPackage does not work

Assets

1

0.5.2

Stable

10/30/2025, 4:06:04 PM

🐛 Fixes

  • fix: possible memory leak if fallback ComponentName is added inside getOrPut()
  • perf: use Sequence instead of List and support service info and provider info

💬 Other

  • chore: upgrade dependency

Assets

1

0.5.1

Stable

9/7/2025, 5:55:26 PM

🐛 Fixes

  • fix: AppIconListPage title does not wrap
  • fix: List item will not care about the actual height, just the min height of text part
  • fix: scroll indicator persists even when strokeWidth = 0
  • fix: search bar shadow needs to be applied after padding
  • fix: ClockDrawableWrapper causes crash on android 16 qpr2 beta
  • fix(merger): content padding issue
  • fix: constructed ClockAnimationInfo is not returned
  • fix: hook only the overload with TaskDescription to fix crash

💬 Other

  • docs: update readme
  • chore: upgrade dependency

Assets

1

0.5.0

Stable

8/25/2025, 11:31:14 AM

🚀 Features

  • feat: material expressive init support
  • feat: add color preview in shape color
  • feat: expressive shapes for dialog button
  • feat: preference screen list style change
  • feat: updated snackbar visual
  • feat: redesign filter
  • feat: IconButtonWithTooltip with shapes
  • feat: redesigned list item
  • feat: add thumb icon to switch
  • feat: hide appfilter when scrolling up
  • feat: redesigned bottom navigation
  • feat: redesigned search bar
  • feat: redesigned app icon list page
  • feat: redesigned animated fab
  • feat: redesigned import/export as fab menu
  • feat: scroll indication box around icon chooser grid
  • feat(IconChooser): expand search bar only when needed
  • feat: ScrollIndicator supports shape
  • feat: clear focus on scroll

🐛 Fixes

  • fix: force create the preference file and use its selinux context
  • fix: option dialog doesn't retain scroll state
  • fix: loading circle doesn't fill max size
  • fix: scale drawable float precision
  • refactor: constant state
  • fix: adjust Preference spacing and color
  • fix: icons invisible introduced by b11f1d12
  • refactor: loading defaults to fillMaxSize()
  • fix: scale drawable applies a new bounds instead of canvas scale to eliminate burr
  • fix: list item wrong text color
  • perf: remove onGloballyPositioned
  • fix(MainActivity): avoid overlapping with toolbar
  • fix: center search bar
  • fix: clear focus after search
  • fix(Merger): can only scroll to next page when base pack is selected
  • fix(IconChooser): add shadow to RoundSearchBar, change content alignment of its expand transition
  • fix: none style icon button does not change shape
  • fix: scroll state will reset if bottom sheet is closed
  • fix: add clear button to search bar
  • fix: next step only shows when base pack is chosen
  • fix: ExpandedScrollConnection will expand only when bigger than a threshold
  • fix: use md3 default search bar
  • fix: clear button will fade out when text is empty
  • fix: animations recalibrate

💬 Other

  • chore: change main dropdownmenu leading icons
  • chore: upgrade dependency

Assets

1

0.4.10

Stable

8/15/2025, 2:06:46 PM

🐛 Fixes

  • fix: clock entries in all drawables
  • fix: apps search bar will search for package name
  • refactor: getCurrentIconPack() to currentIconPack prop
  • fix: show loading circle after changing base pack
  • fix: rename translation keys to ensure clarity
  • refactor: move prefixMsg out of utility function throwOnFail
  • refactor: use rememberLauncherForActivityResult to replace registerForActivityResult in initialization path
  • fix: use world preference selinux context only if it exists
  • fix: provider mode doesn't work because application context isn't ready at ContentProvider.onCreate()

💬 Other

  • chore: upgrade dependency

Assets

1

0.4.9

Stable

8/5/2025, 5:11:32 AM

🐛 Fixes

  • fix(IconPackCreator): progress doesn't advance
  • fix: 76db6707 doesn't fix all
  • fix: add launcher3 to recommends in case user forgets
  • fix: deoptimize accessibility methods
  • fix: runCatching ShareSource getId
  • fix: delete uninstalled iconPack before checking for current pack update time
  • fix(ShareSource): log on exception
  • fix: put the database to null when migrating
  • fix: safer resetting db permission
  • fix: iconPackAsFallback defaults to true
  • fix: reset the permission for journal file so it won't crash
  • fix: remove sort in activity icon list
  • fix: allow custom share db path
  • fix: set memory journal mode for SQLite to avoid journal files

💬 Other

  • chore: remove unnecessary suppress
  • chore: expose only flow interface

Assets

1

0.4.8

Stable

8/4/2025, 9:43:28 AM

🚀 Features

  • feat: clock use fallback mask
  • feat: disable clock seconds
  • feat: add shimmer to unloaded lazy image
  • feat: clear all in AppIconListPage
  • feat: restore default in merger

🐛 Fixes

  • fix(Provider): reset strict mode allow thread disk reads
  • fix: ClockDrawableWrapper.forExtras() does not work since android 15 r20
  • fix(ClockDrawableWrapper): add range check
  • fix: icon variant and merger no longer use icon pack as fallback setting
  • fix: move tooltip below icon button
  • refactor(IconChooserSheet): move replaceIcon callback to UI
  • fix(IconChooser): there is always a original icon when searching
  • fix: grammar
  • fix(IconChooserSheet): suggest icons do not disappear immediately when searching
  • fix: appbar scroll behavior will reacts to page changes
  • fix(TextFieldDialogContent): cursor will be set to the end of init value
  • fix: shape color dialog should not be dismissed until a valid color
  • fix: shape color dialog is unable to parse color
  • fix: shape color pref will display the color in summary
  • fix: arbitrary pages
  • fix: safer migrate db
  • refactor: save viewmodel state, refactor state and navigation
  • fix: PackInfoForm on landscape
  • fix: simplify too long english strings
  • refactor: pass old db from helper
  • fix(MainPreference): wrong divider position

💬 Other

  • docs(issue template): comment out desc
  • build: move from groovy to kotlin
  • docs: update third-party-libs.html
  • ci: move refactor and revert to fixes
  • chore: delete .github/ISSUE_TEMPLATE/custom.md
  • docs: new screenshots

Assets

1

0.4.7

Stable

7/23/2025, 8:30:04 AM

🐛 Fixes

  • fix(AppIconListVM): distinct and sort items by icon
  • fix(AppIconListPage): edge to edge for IconList
  • fix: appIconEntry not being changed
  • perf: distinctBy only when app changes
  • fix(InstanceManager): cache lock
  • fix: db early error
  • fix: remove unnecessary mapLatest
  • fix: set db parent to 0777 to avoid potential issue
  • fix: remove LoadingDialog title space

💬 Other

  • build: some commits are not included
  • refactor: ConsumablePadding
  • refactor: simplify WorldPreference

Assets

1

0.4.6

Stable

7/21/2025, 1:09:03 PM

🚀 Features

  • feat: compatible with android >= 8 (#102) @Mickmick21

🐛 Fixes

  • fix: reset db permission in provider mode
  • fix: remove duplicate debounceInput
  • perf(AppIconList): stop and lazy restart flow as needed
  • fix: change min sdk to 27. SQLite won't work otherwise.
  • fix: PIXEL_LAUNCHER_PACKAGE pref will use TextFieldDialogContent
  • fix: u:object_r:magisk_file does not work for ksu android 16
  • fix: double the icon cache size
  • fix(AppIconListVM): flow is not started as intended

💬 Other

  • chore: cleanup

Assets

1

0.4.5

Stable

7/19/2025, 7:36:51 AM

🚀 Features

  • feat: radio button in merger base pack selection
  • feat: use broken_image.xml to represent missing icons
  • feat(Merger): ripple round corner
  • feat: auto fill missing icons from other icon packs

🐛 Fixes

  • fix: deoptimize system ui methods
  • perf: minus assign instead of filterKeys
  • fix(AutoFill): move draggable handle to drag indicator icon, to avoid conflict with lazy column
  • perf(IconPackApps): flow stops after a timeout

💬 Other

  • chore: code cleanup
  • chore: upgrade dependencies
  • refactor: object Apps
  • docs: add missing licenses
  • chore: cleanup

Assets

1

0.4.4

Stable

6/22/2025, 8:01:43 AM

🚀 Features

  • feat: add com.google.android.apps.wellbeing to xposed scope

🐛 Fixes

  • fix: android 15 qpr2
  • fix: > android 15 r20 and fallback icon may be processed twice

Assets

1

0.4.3

Stable

6/7/2025, 8:53:14 AM

🚀 Features

  • feat: add progress report to icon pack creator

🐛 Fixes

  • fix: probably uninitialized prefFlow before setup.
  • fix(Merger): correct bottom padding for fab and nav pill
  • fix(create_icon_pack.sh): wording

💬 Other

  • build: upgrade dependency
  • docs: add OTA instruction

Assets

1

0.4.2

Stable

5/23/2025, 2:11:01 PM

🚀 Features

  • feat: improved page transition and shared bounds between pages

💬 Other

  • build: match fix(a.xml): xxx

Assets

1

0.4.1

Stable

5/21/2025, 9:54:45 AM

🚀 Features

  • feat: override with shape and disable foreground

Assets

1