在 Android 字符串资源中直接使用 Emoji

96
HelloCsl
2018.05.05 09:31* 字数 290

问题描述

某些情况下,类似的在 string.xml 中定义这样的带 emoji 表情的字符串可以使得提示更加的生动和形象

<string name="hot">🔥Hot</string>

直接打包运行在高版本的 Android 上,例如 7.0 应该是没有问题的,但如果在需要兼容 4.0 那么还需要多几步操作,否则 crash

  1. 启用 utf-16 编码
android {
    aaptOptions {
        additionalParameters '--utf16'
    }
}
  1. 如果你使用的 Android Gradle 编译插件是 3.0.0 以上,那么会默认启用 Appt2 来打包资源,Appt2 不支持 utf16 编码的,所以在编译的时候会出错,所以需要在 gradle.properties 禁用 Appt2
android.enableAapt2=false

以上,就可以在 4.0 以上直接使用 emoji 表情了

潜在问题

Android Gradle 编译插件在 3.2 的时候移除了 Appt1,所以暂时不能把编译脚本版本升级到 3.2,也不知道 Google 会不会修复这个问题,不过也没什么关系的,即使以后不支持而你又需要新的编译脚本,把 emoji 去掉就可以

参考

App Crash when minSdk==9 and string resource includes an emoji

Android开发
Web note ad 1