Android 4.4.2 系统源码字体库精简、添加
字体加载原理
首先先来阐述一下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
- NotoSansDevanagari-Regular.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 系统源码字体库精简、添加相关推荐
- android 10.0 在系统源码下生成jks系统签名文件
在系统开发中,会遇到在app在线升级的时候,会升级失败,由于app自己用自己的签名文件签名的 所以会和系统签名文件不一样,导致会出现一些问题 所以为了解决这一个问题 就得使用系统生成的签名文件 给ap ...
- 2022新版驾考技巧驾考培训驾考技巧考试培训系统源码/题库小程序/题库系统源码/驾考答题系统源码
品牌:无 语言:php 大小:998.3M 类型:驾考答题系统源码 支持:H5 欢迎关注(发消息才不限制),私信,领取 源码简介: 这套是我某站买的一套运营级系统,之前我在运营,现在没做 ...
- 基于java springboot android 安卓图书借阅系统源码(毕设)
开发环境及工具: 大于等于jdk1.8,大于mysql5.5,idea(eclipse),Android Studio 技术说明: springboot mybatis html vue.js boo ...
- Android FrameWork学习(一)Android 7 0系统源码下载 编译
最近计划着研究下 Android 7.0 的系统源码,之前也没做过什么记录,这次正好将学习的内容记录下来,方便以后复习巩固. 既然要学习我们的系统源码,那我们第一步要做的就是下载源码并进行编译了. # ...
- Android FrameWork 系统源码调试
这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...
- Android FrameWork 学习之Android 系统源码调试
这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...
- Android AOSP基础(三)Android系统源码的整编和单编
本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(二)AOSP 源码下载 中,我们顺利的将AOSP ...
- Android AOSP基础(四)Source Insight和Android Studio导入系统源码
本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,我们对 ...
- 直播系统源码开发:关于安卓开发工具和obs直播推流
随着移动互联网技术的不算发展,直播系统源码不再局限于娱乐直播的范畴,而是被广泛的应用于各行各业.尤其对于今年来说,购物直播行业的迅速发展,对直播系统源码开发的需求进一步扩大,同时对直播源码开发技术也有 ...
最新文章
- linux locate 用目录,Linux 命令(文件和目录管理 - locate)
- Go的slice扩容机制
- Linux下用at计划任务
- Pytorch基础(四)—— 卷积层
- IIS7开启gZip动态压缩
- 学校计算机数据采集处理系统,中学化学计算机数据采集处理系统实验室装备
- JavaScript笔记-前端原生态WebSocket的使用
- (21)Verilog HDL结构:task语句
- 开课吧9.9元学python靠谱吗-开课吧的python课程怎么样,值得报名吗?
- 实战flex:模拟实现静态知乎首页
- [BX]和loop指令06 - 零基础入门学习汇编语言28
- USB接口、串口、并口有何区别
- WIN10家庭版+ANSYS/AUTODYN安装学习
- 斐讯w2换表盘_斐讯W2智能手表初体验:路由不要钱!手表也白送!
- Kotlin 使用DSL构建语法结构 看这一篇就够了~
- 心脏滴血漏洞(CVE-2014-0160)
- 2019 南京 网络赛 B (二维偏序,树状数组离线)
- 区块链如何改变供应链金融
- ym——Andorid-15k+的面试题。
- YouTube 创始人陈士骏,成立了一支由 AI 决策的对冲基金