字型庫精簡的目标是精簡/system/fonts下的字型檔案,達到壓縮system大小的目的。
由于本項目之用到了中英文,是以精簡的方法是将其他語言的ttf字庫全部去掉,也就是将/frameworks/base/data/fonts目錄下的幾個配置檔案的相關内容全部注掉,之保留中英文的部分。
最後精簡的結果是隻保留如下幾個檔案,其餘都可删除,如果想知道字庫的具體語種,可以下載下傳fontcreator工具檢視,或者直接将ttf名字進行百度。下面幾個字庫分别代表了中英文的字庫。
裁剪檔案 | 大小 | 作用 | 是否可裁剪 |
Roboto-Bold.ttf | 112.0K | DroidSans-Bold.ttf連結到了本字型上,android4.4以後系統實際使用的是本字型檔案作為英文加粗的字庫 | 不可删除 |
DroidSans-Bold.ttf | 系統預設使用的英文加粗字型,隻是一個空殼 | 不可删除 | |
Roboto-Regular.ttf | 112.0K | 系統預設使用的英文字型,DroidSans.ttf連結到了本字庫上 | 不可删除 |
DroidSans.ttf | 系統預設使用的英文字型,隻是一個空殼 | 不可删除 | |
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 >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就很好下手。