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 12+ (I tested on android 14, 15)
  • 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

  • Use share mode if possible. The provider is provided as a fallback in case 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 OTA may reset the permissions of share mode database. It is recommended that you deselect apps in LSPosed, after OTA, you select them again, and open GIP at least once (to setup the permissions), then click each of Restart xxx.
  • 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!
  • 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 force stopping 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
  • Russian
    • Кирилл Гук
    • Alohaa666
  • Chinese Traditional
    • Jia-Bin

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.

Package

com.richardluo.globalIconPack

Authors

RichardLuo

Releases

0.4.4

Release type: 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

0.4.3

Release type: 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

0.4.2

Release type: 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

0.4.1

Release type: Stable

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

🚀 Features

  • feat: override with shape and disable foreground

0.4.0

Release type: Stable

5/14/2025, 4:47:48 PM

🚀 Features

  • feat: add loading dialog for import and export
  • feat: set icons for activities
  • feat: generate fallback icon for sym_def_app_icon

🐛 Fixes

  • fix: read closed cursor
  • fix(IconVariant): the sdk unflattenFromString can not handle empty classname

0.3.13

Release type: Stable

5/11/2025, 4:32:56 PM

🚀 Features

  • feat: auto refresh app list when new app is installed

🐛 Fixes

  • fix: reset permission each time in share mode

💬 Other

  • chore: update dependency
  • docs: uninstallation in share mode instruction

0.3.12

Release type: Stable

5/1/2025, 4:10:46 PM

🐛 Fixes

  • fix: restart pixel launcher will now restart user defined launcher
  • fix: not work for some highly optimized systems

💬 Other

0.3.11

Release type: Stable

4/30/2025, 5:24:10 PM

🐛 Fixes

  • fix: icon pack selection dialog not opening if the icon pack has been uninstalled

💬 Other

  • chore: code cleanup

0.3.10

Release type: Stable

4/30/2025, 4:55:02 AM

🚀 Features

  • feat: display the pixel launcher package name in summary if it is not the default value

🐛 Fixes

  • fix: scale task icon using NON_ADAPTIVE_SCALE
  • fix: hook nexus launcher and launcher3 even if launcher package is set to other value

💬 Other

  • refactor: PrefEntry instead of just Pair
  • docs: README.md

0.3.9

Release type: Stable

4/29/2025, 12:54:25 PM

🚀 Features

  • feat: replace icon in task description (for example custom tabs)

🐛 Fixes

  • fix(ScrollIndicationBox): use DarkGray in light mode
  • fix(Utils): asType does not do type checking
  • fix(task icon): use primary color as background

💬 Other

  • refactor: move sources to .source, models to .model
  • refactor: use MethodHookParam as receiver
  • docs: add new translator

0.3.8

Release type: Stable

4/28/2025, 11:24:47 AM

🚀 Features

  • feat: suggest icon based on current icon entry

🐛 Fixes

  • fix: Custom Drawable can work with color filter
  • fix: some errors in android 14
  • fix: for non adaptive icon, mask should be applied
  • fix: limit height of info dialog to 600 dp
  • fix: limit height of lazy dialog to 600 dp and add a scroll indication

💬 Other

  • refactor(MainVM): make it more clear
  • docs: bug_report.md
  • refactor: a more kotlin way of reflection

0.3.7

Release type: Stable

4/20/2025, 7:50:09 PM

🚀 Features

  • feat: non adaptive icon will use backAsAdaptiveBack
  • feat(Merger): support setting icon for merged icon pack

🐛 Fixes

  • perf: store drawable id in database
  • fix(processIcon): incorrect handling of non adaptive icon back as adaptive back
  • fix: incorrect make adaptive back

💬 Other

  • docs: drop android 11
  • docs: add mode description

0.3.6

Release type: Stable

4/16/2025, 4:52:46 PM

🚀 Features

  • feat: deprecate no force shape, replaced with convert to adaptive.
  • feat: add use fallback back as adaptive back
  • feat: add bottom navigation

🐛 Fixes

  • fix: bypass api restriction so no need to check isInMod
  • fix: AccessibilityServiceInfo
  • fix(MainActivity): align text with icon

💬 Other

  • chore: rename hookAllMethodsOrLog

0.3.5

Release type: Stable

4/15/2025, 9:18:29 AM

🐛 Fixes

  • fix(processIconToAdaptive): do not apply mask on back back if scale whole adaptive icon
  • perf: toSafeBitmap() max height to 192
  • fix(Merger): some icons not changing when switching icon pack
  • fix: fab will no longer hide list or grid
  • fix(Merger): alleviate lag after choosing icon pack
  • fix: nonAdaptiveScale maybe not applied if icon scale is not overridden

💬 Other

  • chore: rename createScaledDrawable

0.3.4

Release type: Stable

4/14/2025, 8:37:23 AM

🐛 Fixes

  • fix: app pref should be at device protected storage, otherwise will bootloop in provider mode
  • fix: output more logs when share mode failed
  • fix(ShareMode): mkdir only when not exists
  • fix(ShareMode): create db file before give permission
  • fix: inline function breaks from time to time, I don't know why
  • fix(ShareMode): SQLiteOpenHelper permission issue
  • fix(ShareMode): set new db path after update successfully
  • fix(KeepAliveService): does not call startForeground() exception
  • fix: selinux context on parent

💬 Other

  • chore: add dependency-license-report

0.3.3

Release type: Stable

4/13/2025, 5:43:38 PM

This version has added a new mode called Share mode. With this mode, the app is no longer required to run in the background, and hooked apps should be more performant.

🚀 Features

  • feat: create_icon_pack.sh will prompt whether you want to download android sdk
  • feat: add a share mode which loads from a shared database
  • feat: add first time setup dialog

🐛 Fixes

  • fix: export ${pack}.xml
  • perf: hook abstract onAppIconChanged
  • perf: batch icon queries
  • fix: the application info inside activity info is not replaced
  • fix(RemoteIconPack): if query returns null, set all misses to null
  • perf(RemoteIconPack): use column index and add fallback if it is a fallback
  • fix: add class to list replacer
  • fix(db): in case result order goes wrong
  • fix: MergeCursor can not accept a empty cursor list
  • fix(MainVM): throw error when pack name is empty
  • fix: avoid duplicate loading on search
  • fix: hit enter will no longer send a \n
  • fix: default to local mode so during first time setup there will not be exceptions

💬 Other

  • ci: use pre release and should be able to push to xposed repo
  • chore: cleanup
  • chore: rename PackResources
  • refactor: extract Map.getOrPut(list)
  • ci: seperate owner and repo

0.3.1

Release type: Stable

4/4/2025, 1:32:03 PM

0.3.0

Release type: Stable

4/3/2025, 1:34:33 PM