转自:https://blog.csdn.net/qinghua0706/article/details/8243858html
最近开始作智能机,用的是展讯6820平台,第一个需求就是改默认语言,通常碰到不会的东西首先想到的就是上网找下了。网络确实是个好东西,给咱们的工做和学习带来了极大的方便,但享受到网络的方便的同时也体会到了庞大的信息带给咱们的困惑和迷茫,就一个字,晕!android
首先说下在网上能找到的答案吧shell
1. 进入android 源代码build/target/product目录,在languages_full.mk或languages_small.mk文件中,修改PRODUCT_LOCALES的值,在PRODUCT_LOCALES字段里,将要选择的语言放在第一位。网络
修改完后从新编译,生成img文件fastboot到手机。
2. 进入adb shell,直接使用setprop 命令设置 persist.sys.language 和 persist.sys.country这两个属性值。
例如:学习
完成配置后重启就可以达到你预期的结果的。ui
3. 进入build/target/product目录,修改文件core.mk的PRODUCT_PROPERTY_OVERRIDES 值,例如,欲修改成默认中文,则增长
“\ persist.sys.language=zh \ persist.sys.country=CN”,增长后的语句如spa
4. 若是是本身编译源码 编译的时候,经过指明编译参数为简体中文,这样编译传统就会编译出来的系统属性文件,在
系统初始化的时候将会把上面的属性给进行正确的初始化,例如:
make PRODUCT-machineID-eng-zh_CN
或者修改build/tools/buildinfo.sh添加
.net
五、在init.rc或者在其余的开机初始化文件如:default.prop中加入以下设置系统属性的代码:
code
6. 修改system\build.prop
xml
ro.product.locale.language=zh ro.product.locale.region=CN persist.sys.timezone=Asia/Shanghai
看完了是否是以为很晕,这几个方法都被转载了N遍,真的有这么多种方法吗?这么多地方能够修改,那到底执行的顺序是怎么样的,好比说在一个地方设置为中文,另一个地方设置为英文,确定有一个地方要被覆盖了。
首先要说的是上面的答案从某种程度来说确实均可以修改默认语言,要否则也不会有人分享出来,并且都被转载了N遍,但估计都是以为改好了就算了,也不想到底合不合理。看到答案,首先就没有考虑第2条和第6条,这样子改完了从新编译工程烧到手机里面不又还原了吗,system\build.prop 这个文件时编译完了以后才生成的。第1条也不适合我,打开代码中的languages_full.mk和languages_small.mk文件,中文都不是在第一位的,但实际上手机的语言是中文的。第5条答案没试,不知道init.rc文件在哪里,搜索了一下发现不少地方都有这个文件,打开来看因为知识有限也看不懂。
剩下两个答案通过试验都是有效的,但到底加载默认语言的顺序是怎样的,而后在上网找了一下,也知道了为何改languages_full.mk不行了。首先anguages_full.mk和languages_small.mk这两个文件第一个都是en_US。
PRODUCT_LOCALES := en_US fr_FR it_IT es_ES de_DE nl_NL cs_CZ <span style="font-size:18px;">...</span>
打开build/core/Makefile文件,里面有这样一段代码
下面有一段这样的代码
能够看出,默认语言确实取出的是PRODUCT_LOCALES字段的第一个,然而在这个以前有这样一段代码
<span style="font-size:18px;">BUILDINFO_SH := build/tools/buildinfo.sh</span>
说明Makefile会调用build/tools/buildinfo.sh执行脚本,并输出到build.prop。如今打开buildinfo.sh惊喜地发现个人代码中
原来这个被注释掉了,再下面
原来是这样子来的。还没结束,接着Makefile中直接把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中,还会收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。
也就是到了 build/target/product/core.mk中$(PRODUCT_PROPERTY_OVERRIDES)里面的值,也能够在这里面指定语言。 每套android的代码都不彻底相同,能够还有其余不少方法修改语言的。在吸取互联网中的知识的时候,但愿不要仅仅想着获得答案,更要多想一想缘由,在传播知识出去的时候,也要把本身的思惟传播出去。做为一个初学者而言,更指望的获得的是能力而不是知识。