字体库精简的目标是精简/system/fonts下的字体文件,达到压缩system大小的目的。
由于本项目之用到了中英文,所以精简的方法是将其他语言的ttf字库全部去掉,也就是将/frameworks/base/data/fonts目录下的几个配置文件的相关内容全部注掉,之保留中英文的部分。
最后精简的结果是只保留如下几个文件,其余都可删除,如果想知道字库的具体语种,可以下载fontcreator工具查看,或者直接将ttf名字进行百度。下面几个字库分别代表了中英文的字库。
裁剪文件 | 大小 | 作用 | 是否可裁剪 |
Roboto-Bold.ttf | 112.0K | DroidSans-Bold.ttf链接到了本字体上,android4.4以后系统实际使用的是本字体文件作为英文加粗的字库 | 不可删除 |
DroidSans-Bold.ttf | 0 | 系统默认使用的英文加粗字体,只是一个空壳 | 不可删除 |
Roboto-Regular.ttf | 112.0K | 系统默认使用的英文字体,DroidSans.ttf链接到了本字库上 | 不可删除 |
DroidSans.ttf | 0 | 系统默认使用的英文字体,只是一个空壳 | 不可删除 |
DroidSansFallback.ttf | 4.3M | 系统使用的默认汉字字库 | 不可删除 |
具体修改一般来讲只需要修改以下三个文件即可。
frameworks/base/data/fonts/Android.mk
frameworks/base/data/fonts/fallback_fonts.xml
frameworks/base/data/fonts/system_fonts.xml
对于frameworks/base/data/fonts/Android.mk中定义的整段的编译,如果不需要的话要将include整个注释掉,如
diff --git a/frameworks/base/data/fonts/Android.mk b/frameworks/base/data/fonts/Android.mk
index 5cb51cd..b71b62d 100644
--- a/frameworks/base/data/fonts/Android.mk
+++ b/frameworks/base/data/fonts/Android.mk
@@ -44,26 +44,26 @@ ifeq ($(SMALLER_FONT_FOOTPRINT),true)
droidsans_fallback_src := DroidSansFallback.ttf
extra_font_files := DroidSans.ttf DroidSans-Bold.ttf
else
-include $(CLEAR_VARS)
-LOCAL_MODULE := DroidSansEthiopic-Regular.ttf
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := MTLmr3m.ttf
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
-include $(BUILD_PREBUILT)
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := DroidSansEthiopic-Regular.ttf
+#LOCAL_SRC_FILES := $(LOCAL_MODULE)
+#LOCAL_MODULE_CLASS := ETC
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+#include $(BUILD_PREBUILT)
+
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := MTLmr3m.ttf
+#LOCAL_SRC_FILES := $(LOCAL_MODULE)
+#LOCAL_MODULE_CLASS := ETC
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
+#include $(BUILD_PREBUILT)
对于下面extra_font_files和font_src_files定义的,将不用的行注释掉就行,保留中英文的行即可。
对于frameworks/base/data/fonts/fallback_fonts.xml文件,需要以family为单位进行注释,注释掉不需要的family。比如
--- a/frameworks/base/data/fonts/fallback_fonts.xml
+++ b/frameworks/base/data/fonts/fallback_fonts.xml
@@ -29,6 +29,7 @@
all others.
-->
<familyset>
+<!--
<family>
<fileset>
<file variant="elegant">DroidNaskh-Regular.ttf</file>
@@ -230,11 +231,13 @@
<file>NotoColorEmoji.ttf</file>
</fileset>
</family>
+-->
<family>
<fileset>
<file>DroidSansFallback.ttf</file>
</fileset>
</family>
+<!--
<family>
<fileset>
<file>NotoSansGurmukhi-Bold.ttf</file>
@@ -300,6 +303,7 @@
<file lang="ja">MTLmr3m.ttf</file>
</fileset>
</family>
+-->
对于frameworks/base/data/fonts/system_fonts.xml文件,只是掉不需要的file标签和family标签即可,方法跟上面类似。
以上修改完之后就可以删除out/。。。/system/fonts目录下的ttf文件,然后进行编译,验证下自己的修改了,如果有发现还有多余的其他字体文件仍然参与了编译,可以查下源码路径下/external目录下是否有其他的字体文件的makefile配置,如果有则进行注释就可以了。我在修改的时候就发现有两个文件NotoSansSymbols-Regular.ttf,NotoColorEmoji.ttf是在/external下进行配置的,注掉即可。
字体精简这部分其实还是挺简单的,只要找到makefile就很好下手。