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的源码,逻辑和位置是一样的,暂未测试,预计可行。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值