You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android EmojiCompat中FontRequest的CERTIFICATES获取咨询

如何获取EmojiCompat中FontRequest所需的CERTIFICATES?

我当初配置EmojiCompat的时候也踩过这个坑,官方文档这块确实没说清楚,我来给你捋明白:

首先得搞懂,CERTIFICATES是用来验证字体提供者身份的证书哈希数组,目的是防止恶意第三方替换你的Emoji字体,保证加载的字体来源可信。

最省心的方案:用Google官方的简化配置

如果你的App是面向大多数使用Google Play Services的设备,完全不用折腾证书——直接用GoogleEmojiCompatConfig替代FontRequestEmojiCompatConfig就好,代码更简洁,还自动帮你处理证书验证:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        EmojiCompat.Config config = new GoogleEmojiCompatConfig(this);
        EmojiCompat.init(config);
    }
}

这也是官方推荐的方式,所以文档里没细讲CERTIFICATES的事儿,因为大部分场景根本用不上。

如果你一定要用FontRequest方式(比如自定义字体提供者)

如果是自己搭建字体服务,或者有特殊需求必须用FontRequest,那得自己生成证书哈希:

  • 步骤1:导出你的字体提供者的签名证书公钥
    假设你用自己的签名密钥给字体服务签名,用keytool导出证书:
    keytool -exportcert -alias 你的密钥别名 -keystore 你的密钥库路径.jks -file output.cer
    
  • 步骤2:生成证书的SHA-256哈希值
    用openssl工具提取哈希:
    openssl sha256 output.cer | xxd -p | tr -d "[:space:]"
    
  • 步骤3:把哈希值放到XML资源里
    把得到的哈希字符串放到你看到的string-array中,比如:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
            <item>你生成的哈希字符串</item>
        </string-array>
    </resources>
    
  • 步骤4:在代码中引用这个数组
    在Application类里获取资源数组作为CERTIFICATES:
    String[] CERTIFICATES = getResources().getStringArray(R.array.certs);
    

补充:如果是用Google的FontRequest服务

要是你非要用Google的字体服务但又想走FontRequest流程,Google的证书哈希可以在官方Sample代码里找到,但真的没必要——直接用GoogleEmojiCompatConfig香多了。

内容的提问来源于stack exchange,提问作者reactor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:44:22