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 ;)
You can put emojis in an XML, and the squares are just the editor's way to render characters it can't recognize, like all other characters, you can specify the character by its UTF8 value instead. For example, 😃 has the char value of 128515, so you could use 😃 to specify it.
Use HTML Entity (decimal) i.e. 👈 to add 👈 in strings. xml and use it in your app. Show activity on this post. However, just pasting it as the emoji character from clipboard ❤️ direct into the translations editor worked just fine, and perhaps I needn't have worried at all.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With