Android源码层级修改默认语言

    最近项目上需要定制自己的Android ROM,默认语言修改了简体中文(吐槽,默认英语不好吗,正好还可以多学自己单词!麻烦归麻烦,该做的还是要做)。

    首先要知道Android源码下语言格式为en_US, en表示英语,US表示哪个国家的英语。而解析的时候,en就将是设定的语言(language),US则是对应的国家(region)。

    其次是如何判定语言的

    在build/core/Makefile中有如下代码,显而易见,脚本解析环境变量,并将en_US拆分并赋值给PRODUCT_DEFAULT_LANGUAGE和PRODUCT_DEFAULT_REGION

            PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \
            PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" \

而default-locale-language和default-locale-region的定义如下

define default-locale-language
$(if $(product_property_override_locale_language),,$(word 1, $(call default-locale, $(1))))
endef
define default-locale-region
$(if $(product_property_overrides_locale_region),,$(word 2, $(call default-locale, $(1))))
endef

最后看到这里,大概明白怎么回事了,总结一下:

PRODUCT_LOCALES变量中存放了一组语言组合(语言和国家),但是编译脚本只取第一个为首要设置,所以只要找到PRODUCT_LOCALES变量设置的地方,并将zh_CN放置到第一个即可。

所以最终修改方案,在build/target/product/目录下,有关于PRODUCT_LOCALES变量的定义,grep一下就能找到全部的位置,由于验证比较麻烦,偷了个懒,将所有能找到的地方全修改了,最终在Android 4.4源码中实测通过,后来又查阅了Android 7的源码,逻辑和位置是一样的,暂未测试,预计可行。

猜你喜欢

转载自blog.csdn.net/xy_kok/article/details/81092567