This turned out to be caused by AndroidX AppCompat automatically including and initializing EmojiCompat starting from version 1.4.0. Flutter’s Android embedding depends on AppCompat, so even if I didn't add any emoji-related packages, androidx.emoji2.text.EmojiCompat is pulled in transitively and initialized at app startup. It loads emoji metadata (~350 KB), which shows up in memory profiling as a single retained EmojiCompat instance.