Love them ❤ or hate them 🤬, emojis have become a staple form of expression these days. These small little blobs add emotion and intention to words, and conversation across the internet would be incomplete without them. They are a big deal even for interpersonal conversation -- why waste time say lot word when emoji do trick? So it comes as no surprise that Google has taken a look at Android and figured it has an emoji problem, and with Android 12, it tries to fix it.

Android and its emoji problem

Emojis are a big deal. Emoji usage is at an all-time high, and users on some apps send billions of emojis every day. Feeding and keeping up with these changes is the Unicode standard, and it receives frequent updates that add new emojis. These new emojis center around new use cases, trends, and even variations to make them better representatives for diversity and inclusion.

Android vs iOS Emoji presentation slide

In its Android Dev Summit 2021 presentation, Google says that 96% of Android users do not see the latest emojis, in stark contrast to the 16% of iOS users who are unable to see the latest emoji. The top 100 emojis comprise ~82% of total emoji shares. But for 20% of these shares, the sender sends an emoji but the receiver only sees a "tofu" or the broken image denoted by a box with an X in it, meaning that their phone system does not have the relevant emoji to display.

Slide showing the "tofu" icon ie when emoji file is not present to be displayed

The problems don't end with tofus. In certain situations concerning newer emojis and older Android versions, the emoji displayed ends up being a formulaic representation, requiring users to do some mental gymnastics to understand what really is going on.

Before Android 12, whenever Unicode gets new emojis, we needed to wait for an Android OS upgrade to reach our phones to bring support for the emoji, before we can actually make them a part of our internet lingo. And we all know how bad Android's update situation actually is. Yes, it has improved. But unless you have a flagship, chances are that you're still taking a fair few months before the latest update reaches your device in a stable release. There's a good chance that more new emojis have been added in this time lag, keeping you out of the loop on the current lingo.

It's clear that there is a problem here, and there needs to be a solution. Google set itself a goal of making every emoji available to all Android users in all apps, and it is taking a two-pronged approach to achieve this.

Google's Emoji goals

Solution 1 of 2: Updateable System Fonts (Android 12 and above)

Starting with Android S (Android 12), Google has introduced updateable system fonts, and the first font that they will update is the emoji font.

We've talked about Updateable System Fonts in the past, almost a year ago actually. In Android 11 and below, all fonts on Android are stored in the system partition, and more specifically, under the /system/fonts directory. Emojis, in particular, are present within the file called NotoColorEmoji.ttf. The system partition is read-only, and updating any file within the partition requires a system update while the partition isn’t mounted. So the only ways to get new fonts and new emojis are to wait for an official OTA update or install it yourself unofficially through root.

With Android 12 and Updateable System Fonts, the font files are stored at /data/fonts/files, and available to read for all apps but is writeable only by the system_server and init. This way, Google can push out updated font files, and apps can read them for the most up-to-date information irrespective of when was the last Android system update on the phone. As an app developer and even as a user, you never have to think about emoji support again on an Android 12+ device.

Solution 2 of 2: EmojiCompat with AppCompat 1.4 (Android 4.4. to Android 11)

Android 12 was just launched a few weeks ago in the stable branch, and it is going to be a while before you see proliferation across the Android ecosystem. So you do need a solution that works on Android 11 and below. That solution is the EmojiCompat support library.

AppCompat 1.4 incorporates EmojiCompat, which means that all apps using AppCompat 1.4 will automatically support modern emojis. As an app developer, you just need to integrate/bump your AppCompat version to 1.4 and you will display updated emojis to users even on Android 4.4, without needing any further effort on anyone's end.

EmojiCompat for emojis

There is a small catch though. The catch is that this is a GMS-core-oriented change that requires Google Play Services to function. This isn't a change to AOSP for older Android versions in the way that the first solution is, and it can't really be that either because of the way time and physics work.

Android Emoji Policy for Android 12

In addition to these highlights, Google has also added an Android Emoji Policy for apps running on Android 12 and above. These apps must comply with the latest Unicode version within 4 months of public availability, and they must do so in either of these three ways:

  • If AppCompat is already in use, make sure emoji is enabled.
  • Use an existing EmojiCompat library across all surfaces within the app. This should work with custom views that directly use StaticLayout.
  • Update the handling and font/images for emoji based on the latest version of Unicode.

If my understanding is correct, the last option is just asking devs to bundle emojis within their app. Either way, developers need to ensure they meet these requirements before February 2022.

Google has resources for app developers to fix their emoji issues, and we recommend that you check them out:

Android 12L and Unicode 14

Android 12L that was launched yesterday comes with Unicode 14 support (via 9to5Google). Unicode 14.0 includes the following new emoji:

  • Melting Face
  • Face with Open Eyes and Hand Over Mouth
  • Face with Peeking Eye
  • Saluting Face
  • Dotted Line Face
  • Face with Diagonal Mouth
  • Face Holding Back Tears
  • Rightwards Hand
  • Leftwards Hand
  • Palm Down Hand
  • Palm Up Hand
  • Hand with Index Finger and Thumb Crossed
  • Index Pointing at the Viewer
  • Heart Hands
  • Biting Lip
  • Person with Crown
  • Pregnant Man
  • Pregnant Person
  • Troll
  • Coral
  • Lotus
  • Empty Nest
  • Nest with Eggs
  • Beans
  • Pouring Liquid
  • Jar
  • Playground Slide
  • Wheel
  • Ring Buoy
  • Hamsa
  • Mirror Ball
  • Low Battery
  • Crutch
  • X-Ray
  • Bubbles
  • Identification Card
  • Heavy Equals Sign

In addition, the release includes variations and skin tones of these new emoji, bringing the total to 112 new designs.

Long story short, Android's emoji problems should soon be a thing of the past.