Android framework 新增字體
記錄一下在工作中需要在framework中新增字體的步驟:
1.查看路徑為frameworks/base/data/fonts/下的文件,路徑就是定義了系統(tǒng)的默認(rèn)字體.
2.將新增的字體拷貝到此目錄下
3.修改fonts.mk在PRODUCT_PACKAGES中新增字體
4.然后再修改此路徑下的Android.mk,在font_src_files中新增字體
5.最后在fonts.xml中仿照系統(tǒng)定義字體的方法定義新增字體,這樣就完成了修改
6.編譯此模塊就會產(chǎn)生/system/etc/fonts.xml,和新字體包/system/fonts/***.ttf,將此包push到手機(jī)中即可.
上述是新增字體的一般步驟,但是在實(shí)際的使用過成功,編譯此Android.mk并沒有新產(chǎn)生fonts.xml,如果此文件沒有更新,那么就不能push手機(jī)中生效.
由于修改的android版本是基于高通基線的,最后在/vendor/qcom/proprietary/qrdplus/globalization/engine中找到了frameworks/base/data/fonts/fonts.xml的overlay文件,所以在高通版本上增加系統(tǒng)默認(rèn)字體的方法為:
1.修改vendor下面的overlay文件fonts.xml,最好要在vender下面grep搜索哪一個(gè)*mk文件包含了fonts.xml,通過搜索之后發(fā)現(xiàn)在上述的目錄中存在,具體的代碼為:
include $(CLEAR_VARS)
LOCAL_MODULE := fonts.xml
LOCAL_SRC_FILES := fonts-Rev.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT)/etc
include $(BUILD_PREBUILT)
發(fā)現(xiàn)此overlay的文件為fonts-Rev.xml.
2.拷貝新增的字體到此文件路徑下
3.在fonts-Rev.xml中仿照系統(tǒng)新增條目:
<family name="stheiti-light">
<font weight="400" style="normal">STHeiti-Light.ttf</font>
</family>
4.在Android.mk定義
include $(CLEAR_VARS)
LOCAL_MODULE := STHeiti-Light.ttf
LOCAL_SRC_FILES := STHeiti-Light.ttf
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
include $(BUILD_PREBUILT)
5.執(zhí)行make STHeiti-Light.ttf 和 make fonts.xml,即可生成文件,拷貝到手機(jī)中重啟就生效了.
6.在代碼中使用方法為:
android:fontFamily="stheiti-light"