原文链接:http://asysbang.com/forum.php?mod=viewthread&tid=22
对于做image开发的程序员来说,各种定制是经常遇到的,这里做一个汇总:
1、桌面图标定制
修改packages/apps/Launcher2/res/xml/default_workspace.xml pad对应res/xml-sw600dp/default_workspace.xml
可以用的标签包括 favorite 和 appwidget
可以用的属性launcher:packageName launcher:className launcher:screen launcher:x launcher:y
其中appwidget还可以用launcher:spanX launcher:spanY
其中favorite 在手机上还可以定义launcher:container="-101" 来定制在hotseat上面的应用
2、系统设置定制
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
默认屏幕超时时间:def_screen_off_timeout
默认屏幕亮度:def_screen_brightness
安装非市场下载的应用:def_install_non_market_apps
3、系统语言列表定制
如果不做任何修改,那么系统的语言列表会有几十项语言供选择,那么如何定制这个列表呢?
build/target/product/full_base.mk build/target/product/locales_full.mk build/target/product/languages_full.mk 里面都维护了PRODUCT_LOCALES
full_base.mk:58 $(call inherit-product, $(SRC_TARGET_DIR)/product/locales_full.mk) full_base.mk调用 locales_full.mk
locales_full.mk:3 $(call inherit-product, build/target/product/languages_full.mk) locales_full.mk调用 languages_full.mk
最终PRODUCT_LOCALES被追加的很长,也就有了很多的语言。
所以只要重新处理下build下面的调用逻辑,修改PRODUCT_LOCALES的值就可以了
PS:如果一套代码只对应一个产品,可以直接修改,但是如果是多个产品那么就会对多个产品都有影响,需要自己添加标签去控制这个变量
4、系统字体定制
这个需求不是很多,但是android也提供了对应的定制接口
frameworks/base/data/fonts/vendor_fonts.xml 可以查看这个文件里面的描述
只要在产品的mk中用PRODUCT_COPY_FILES把vendor_fonts.xml拷贝到system/etc/fallback_fonts.xml下面就可以了
实际上在skia解析字体时,会分别解析system_fonts.xml和vendor_fonts.xml里面定义的字体,然后根据vendor_fonts.xml里面定义的顺序,把字体插入到system_font的队列中