字体加载原理

首先先来阐述一下Android的字体加载原理,Android系统的字体配置文件位于workspace/frameworks/base/data/fonts/ 文件夹下,分为 system_fonts.xml 和 fallback_fonts.xml 两个文件。当系统需要加载字体时,会优先从 system_fonts.xml 文件开始查找,如果没有找到再进入 fallback_fonts.xml查找。以下是 system_fonts.xml 的部分文件:

<family><nameset><name>sans-serif</name><name>arial</name><name>helvetica</name><name>tahoma</name><name>verdana</name></nameset><fileset><file>Roboto-Regular.ttf</file><file>Roboto-Bold.ttf</file><file>Roboto-Italic.ttf</file><file>Roboto-BoldItalic.ttf</file></fileset>
</family>

我们称 <family> </family> 之间的内容为一个字体族, <nameset></nameset> 之间的内容为字体的名称,<fileset></fileset> 之间的内容为实际调用的字体文件,包括粗体,斜体等。Android字体调用的顺序便是从第一个字体族开始逐个字体族寻找,直到匹配上可以使用的字体便停止寻找。也就是说如果你想添加一些字体并让它显示的话,则要添加到能匹配它的字体之前,这是后话。

总之,Android对于字体就是这样的调用流程,明白了这个后面无论添加还是删除都会好理解一些。

精简字体库

一般来说, system_fonts.xml 下的字体是为英文等拉丁文字准备的,同上不予以精简(毕竟英语的使用面很广),对于字体的精简大都集中在 fallback_fonts.xml 文件上(看名字也知道这是备用的),这里包括了很多地区的字体以及各种表情符号等。

精简字体的方法:在 fallback_fonts.xml 文件中注释掉该字体所在的整个字体族,并找到调用他的 Android.mk 和fonts.mk 文件也将他注释掉,如

fallback_fonts.xml<!--
<family><fileset><file variant="elegant">DroidNaskh-Regular.ttf</file></fileset>
</family>
-->

fonts.mk#    DroidNaskh-Regular.ttf \

Android.mk(要注释掉整个include)#include $(CLEAR_VARS)
#LOCAL_MODULE := NotoSansMalayalam-Regular.ttf
#LOCAL_SRC_FILES := $(LOCAL_MODULE)
#LOCAL_MODULE_CLASS := ETC
#LOCAL_MODULE_TAGS := optional
#LOCAL_MODULE_PATH := $(PRODUCT_OUT)/vendor/fonts
#include $(BUILD_PREBUILT)

精简完以后将整个系统源码 make 一下就可以刷入手机或虚拟机了

附上每个字体对应的语言及所在位置

混合字库(workspace/frameworks/base/data/fonts

  • 显示不同的时间格式

    • AndroidClock.ttf
    • AndroidClock_Highlight.ttf
    • AndroidClock_Solid.ttf
  • 锁屏时钟
    • Clockopia.ttf
  • Emoji表情符号
    • AndroidEmoji.ttf
  • 波斯语、阿拉伯语、乌尔都语字库
    • DroidNaskhRegular.ttf
    • DroidNaskhUIRegular.ttf
  • 亚美尼亚语
    • DroidSansArmenian.ttf
  • 阿姆哈拉语、提格雷语(埃塞俄比亚)
    • DroidSansEthiopicRegular.ttf
  • 中日韩字库,包含完整中文
    • DroidSansFallback.ttf
  • 格鲁吉亚语
    • DroidSansGeorgian.ttf
  • 希伯来语
    • DroidSansHebrewBold.ttf
    • DroidSansHebrewRegular.ttf
  • 西里尔和拉丁字母扩充附加
    • DroidSansMono.ttf
  • 拉丁字母:衬线体
    • DroidSerifBold.ttf
    • DroidSerifBoldItalic.ttf
    • DroidSerifItalic.ttf
    • DroidSerifRegular.ttf
  • 繁体中文字库
    • MTLmr3m.ttf
  • 谚文字母(朝鲜语、韩语)
    • NanumGothic.ttf
  • 官方缅甸语字库
    • padauk.ttf
  • 民间缅甸语字库
    • ZawgyiOne.ttf
  • 欧洲使用的拉丁、西里尔字母
    • Roboto-Regular.ttf
    • Roboto-Bold.ttf
    • Roboto-Italic.ttf
    • Roboto-BoldItalic.ttf
    • Roboto-Light.ttf
    • Roboto-LightItalic.ttf
    • Roboto-Thin.ttf
    • Roboto-ThinItalic.ttf
    • RobotoCondensed-Regular.ttf
    • RobotoCondensed-Bold.ttf
    • RobotoCondensed-Italic.ttf
    • RobotoCondensed-BoldItalic.ttf

Noto字库: workspace/external/noto-fonts

  • 表情字符

    • NotoColorEmoji.ttf
  • 孟加拉语字库
    • NotoSansBengali-Regular.ttf
    • NotoSansBengali-Bold.ttf
    • NotoSansBengaliUIBold.ttf
    • NotoSansBengaliUIRegular.ttf
  • 印度语字库
    • NotoSansDevanagari-Regular.ttf

      • NotoSansDevanagari-Bold.ttf
    • NotoSansDevanagariUIBold.ttf
    • NotoSansDevanagariUIRegular.ttf
  • 卡纳达语字库(印度)
    • NotoSansKannada-Regular.ttf
    • NotoSansKannada-Bold.ttf
    • NotoSansKannadaUIBold.ttf
    • NotoSansKannadaUIRegular.ttf
  • 高棉语字库(柬埔寨)
    • NotoSansKhmer-Regular.ttf
    • NotoSansKhmer-Bold.ttf
    • NotoSansKhmerUIBold.ttf
    • NotoSansKhmerUIRegular.ttf
  • 老挝语字库
    • NotoSansLao-Regular.ttf
    • NotoSansLao-Bold.ttf
    • NotoSansLaoUIBold.ttf
    • NotoSansLaoUIRegular.ttf
  • 马拉雅拉姆文字库(印度)
    • NotoSansMalayalam-Regular.ttf
    • NotoSansMalayalam-Bold.ttf
    • NotoSansMalayalamUIBold.ttf
    • NotoSansMalayalamUIRegular.ttf
  • 泰米尔语字库(印度、斯里兰卡、新加坡)
    • NotoSansTamil-Regular.ttf
    • NotoSansTamil-Bold.ttf
    • NotoSansTamilUIBold.ttf
    • NotoSansTamilUIRegular.ttf
  • 泰卢固语(印度)
    • NotoSansTelugu-Regular.ttf
    • NotoSansTelugu-Bold.ttf
    • NotoSansTeluguUIBold.ttf
    • NotoSansTeluguUIRegular.ttf
  • 泰语字库
    • NotoSansThai-Regular.ttf
    • NotoSansThai-Bold.ttf
    • NotoSansThaiUIBold.ttf
    • NotoSansThaiUIRegular.ttf

NanumGothic(workspace/external/naver-fonts)

  • 韩文字体

    • NanumGothic.ttf
    • NanumGothicBold.ttf

添加字体

添加字体这块我就直接给个链接啦,因为本人也没有尝试过,所以不敢妄言啊。

  • 优雅并极客地添加/更改Android系统的字体
  • 安卓深入字体配置文件

ICU语言包精简

最后,如果大家还想要对语言包进行精简的话,可以参考我的另一篇文章

Android 4.4.2 ICU 语言包 精简、裁剪、定制、本地化

参考资料

Android字库文件简介

原文链接:http://chenggoi.com/2015/01/07/Android_Fonts_Customizing/,转载请注明出处。

Android 4.4.2 系统源码字体库精简、添加相关推荐

  1. android 10.0 在系统源码下生成jks系统签名文件

    在系统开发中,会遇到在app在线升级的时候,会升级失败,由于app自己用自己的签名文件签名的 所以会和系统签名文件不一样,导致会出现一些问题 所以为了解决这一个问题 就得使用系统生成的签名文件 给ap ...

  2. 2022新版驾考技巧驾考培训驾考技巧考试培训系统源码/题库小程序/题库系统源码/驾考答题系统源码

     品牌:无  语言:php  大小:998.3M  类型:驾考答题系统源码  支持:H5  欢迎关注(发消息才不限制),私信,领取  源码简介: 这套是我某站买的一套运营级系统,之前我在运营,现在没做 ...

  3. 基于java springboot android 安卓图书借阅系统源码(毕设)

    开发环境及工具: 大于等于jdk1.8,大于mysql5.5,idea(eclipse),Android Studio 技术说明: springboot mybatis html vue.js boo ...

  4. Android FrameWork学习(一)Android 7 0系统源码下载 编译

    最近计划着研究下 Android 7.0 的系统源码,之前也没做过什么记录,这次正好将学习的内容记录下来,方便以后复习巩固. 既然要学习我们的系统源码,那我们第一步要做的就是下载源码并进行编译了. # ...

  5. Android FrameWork 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  6. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  7. Android AOSP基础(三)Android系统源码的整编和单编

    本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(二)AOSP 源码下载 中,我们顺利的将AOSP ...

  8. Android AOSP基础(四)Source Insight和Android Studio导入系统源码

    本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,我们对 ...

  9. 直播系统源码开发:关于安卓开发工具和obs直播推流

    随着移动互联网技术的不算发展,直播系统源码不再局限于娱乐直播的范畴,而是被广泛的应用于各行各业.尤其对于今年来说,购物直播行业的迅速发展,对直播系统源码开发的需求进一步扩大,同时对直播源码开发技术也有 ...

最新文章

  1. linux locate 用目录,Linux 命令(文件和目录管理 - locate)
  2. Go的slice扩容机制
  3. Linux下用at计划任务
  4. Pytorch基础(四)—— 卷积层
  5. IIS7开启gZip动态压缩
  6. 学校计算机数据采集处理系统,中学化学计算机数据采集处理系统实验室装备
  7. JavaScript笔记-前端原生态WebSocket的使用
  8. (21)Verilog HDL结构:task语句
  9. 开课吧9.9元学python靠谱吗-开课吧的python课程怎么样,值得报名吗?
  10. 实战flex:模拟实现静态知乎首页
  11. [BX]和loop指令06 - 零基础入门学习汇编语言28
  12. USB接口、串口、并口有何区别
  13. WIN10家庭版+ANSYS/AUTODYN安装学习
  14. 斐讯w2换表盘_斐讯W2智能手表初体验:路由不要钱!手表也白送!
  15. Kotlin 使用DSL构建语法结构 看这一篇就够了~
  16. 心脏滴血漏洞(CVE-2014-0160)
  17. 2019 南京 网络赛 B (二维偏序,树状数组离线)
  18. 区块链如何改变供应链金融
  19. ym——Andorid-15k+的面试题。
  20. YouTube 创始人陈士骏,成立了一支由 AI 决策的对冲基金

热门文章

  1. redsocks+iptables+socks5服务商
  2. 【SVN】Switch分支提示“没有共同祖先”
  3. 2.1.数列极限——实数系
  4. rman如何直接备份到异地硬盘,磁带机和磁带库
  5. operator 用法
  6. 同花顺_代码解析_技术指标_Z_3
  7. NFT为实体经济赋能
  8. php+撮合引擎,撮合引擎开发:数据结构设计
  9. Kaggle信贷预测随笔
  10. 100元的人民币换成10元,5元,2元和1元面值