web-dev-qa-db-fra.com

Emoji symbol ???? dans string.xml plante

Je voudrais intégrer le symbole emoji ???? dans mon Android. Par conséquent, j'ai recherché le code hexadécimal pour le symbole utf-8 et ajouté ce qui suit à mon fichier string.xml:

<string name="thumbsup">Perfect <node>&#x1f44d;&#x1f44d;</node></string>

Cela devrait se traduire par Perfect ????????. Cependant, mon application se bloque à la place lorsque l'activité d'appel essaie d'afficher ceci:

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

Pas particulièrement parfait;)

21
toom

La solution pour cela est: Ajoutez "--utf16" à aapt en ajoutant

Android {
    aaptOptions {
        additionalParameters '--utf16'
    }
}

à ton build.gradle fichier et assurez-vous que vous n'utilisez pas aapt2.

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

7
Menny

Il semble que les nouvelles versions de Android ne provoquent pas le plantage (l'API 24 a fonctionné dans mes tests), mais cela n'aide pas si vous supportez des versions plus anciennes. Le meilleur que j'ai pu comprendre, c'est utiliser Java chaînes codées.

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";
}

Cette méthode présente plusieurs inconvénients, le principal étant qu'elle n'est pas accessible dans les fichiers XML de mise en page. Mais il peut être une solution de contournement viable pour certaines situations.

2
Suragch