android – Emoji symbol 👍 in string.xml crashes app-ThrowExceptions

Exception or error:

I would like to integrate the emoji symbol 👍 in my android app. Therefore I looked up the hex code for the utf-8 symbol and added the following to my string.xml file:

<string name="thumbsup">Perfect <node>👍👍</node></string>

This should result into Perfect 👍👍. However, instead my app crashes when the call activity tries to display this:

JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf0

Not particularly perfect 😉

How to solve:

The fix for that is:
Add “–utf16” to aapt by adding

android {
    aaptOptions {
        additionalParameters '--utf16'
    }
}

to your build.gradle file, and make sure you are not using aapt2.

See https://issuetracker.google.com/issues/37140916

###

It seems that newer versions of Android don’t cause the crash (API 24 worked in my tests), but that doesn’t help if you are supporting older versions. The best I have been able to figure out is to use Java coded strings.

public class AppEmojiStrings {

    // This is only a workaround for emoji causing crashes in XML strings.
    // Use the standard strings.xml for all other strings.

    public static final String thumbsUp = "Thumbs up 👍"; 
    public static final String iLoveNY = "I \uD83D\uDC99 NY";
}

There are a number of disadvantages with this method, the main one being that it can’t be accessed in the layout XML files. But it may be a viable workaround for some situations.

Leave a Reply

Your email address will not be published. Required fields are marked *