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
相关产品推荐
相关产品推荐

