Reputation: 13327
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 ;)
Upvotes: 21
Views: 13510
Reputation: 473
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
Upvotes: 7
Reputation: 512296
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.
Upvotes: 4