Подтвердить что ты не робот

Символ Emoji ? в приложении для сбоев string.xml

Я хотел бы интегрировать символ emoji 👍 в приложении для Android. Поэтому я искал шестнадцатеричный код для символа utf-8 и добавил в свой файл string.xml следующее:

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

Это должно привести к Perfect 👍👍. Однако вместо этого приложение падает, когда активность вызова пытается отобразить это:

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

Не особенно совершенен;)

4b9b3361

Ответ 1

Исправление: Добавьте "--utf16" к aapt, добавив

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

в ваш build.gradle файл и убедитесь, что вы не используете aapt2.

См. https://issuetracker.google.com/issues/37140916

Ответ 3

Похоже, что более новые версии Android не приводят к сбою (API 24 работал в моих тестах), но это не помогает, если вы поддерживаете более старые версии. Лучшее, что я смог выяснить, это использовать закодированные строки Java.

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

С этим методом существует ряд недостатков, главным из которых является то, что к ним невозможно получить доступ в XML файлах макета. Но это может быть жизнеспособным решением для некоторых ситуаций.