1、修改编译配置文件
android L
在alps\device\公司名字\项目名字\项目名字.mk 中的 PRODUCT_LOCALES宏 添加需要添加的语言代码,例如斯瓦希里语(坦桑尼亚)是sw_TZ;
android kk 以及kk以前的版本
在mediatek/config/${Project}/ProjectConfig.mk或者mediatek/config/common/ProjectConfig.mk文件中找到宏 MTK_PRODUCT_LOCALES,添加要新加的语言代码,例如斯瓦希里语(坦桑尼亚)是sw_TZ;
2、添加ICU资源
2.1添加ICU资源txt文件到对应的文件夹
把对应的txt文件放到(android L 的路径是 external\icu\icu4c\source\data),(android KK 路径是 external/icu4c/data)目录下coll、curr、lang、locales、region,zone这些子文件夹中。如斯瓦希里语(坦桑尼亚)资源为sw.txt,s w_TZ.txt。
并修改这些目录下的resfiles.mk文件,coll目录下的是colfiles.mk。
如果这些目录下没有这些txt文件,可以在更高android版本或者在http://site.icu-project.org/ 网站下载。
如果要详细了解ICU资源可以参考FAQ04553。
2.2 修改编译配置文件 ( ANDROID L无需此步骤)
把上一步添加的txt文件目录添加到下面文件中。
JB: external\icu4c\stubdata\icudt48l-default.txt
KK: external\icu4c\stubdata\icu-data-default.txt
例如:
coll/sw.res
curr/sw.res;
lang/sw.res、
region/sw.res
zone/sw.res
sw.res
2.3 编译ICU资源
如果只是测试修改后效果,执行步骤A即可;如果需要build后生效,则需要执行全部步骤
下面是KK的icu资源的路径为例子,如果是Android L请改为external/icu/icu4c/source/
A. 在临时目录中编译ICU资源
1. 在external/icu4c下新建临时目录icubuild,进入icubuild目录
mkdirexternal/icu4c/icuBuild
cd external/icu4c/icuBuild
2. 执行icuConfigureRun Linux命令,生成make文件
.././runConfigureICULinux3.执行make−j2命令,
make -j2
4. 将生成的external/icu4c/icuBuild/data/out/tmp/icudtxxl.dat push到手机测试
adbremount
adb push external/icu4c/icuBuild/data/out/tmp/ icuxxl.dat system/usr/icu/
$adb reboot
KK:icudt51l.dat
Android L:icudt53l.dat
B. COPY所需文件
将第一步生成的external\icu4c\icubuild\data\out\tmp\icudtxxl.dat复制到external\icu4c\stubdata下并改名为icudtxxl-all.dat,覆盖原来的同名文件。
KK版本是icudt5l.dat和icudt5l-all.dat
注意:Android L是没有icudt53l-all.dat文件的,直接把icudt53l.dat拷贝过来替换原来的文件即可。
C. 重新编译工程
3、添加字库
新增字库有2种方法,一是替换原有的字库、二是加入到系统字库,其具体方法如下:
一、替换系统原有的字库:
如替换中文字库,把这个三方字库重命名为DroidSansFallBack.ttf,并拷贝到alps\frameworks\base\data\fonts下进行替换,重新编译就行。
如需替换其他字库(请参考FAQ12255 ,FAQ04224 )找出对应的字库并替换。
二、添加到系统字库
- 把对应的字库文件拷贝到frameworks/base/data/fonts下
修改fallback_fonts.xml (frameworks/base/data/fonts)文件
myfont.ttf
添加字库的时候需要把自己需要添加的字库写到fallback_fonts.xml 文件的前面,
如果写到结尾处如果之前的字库有该字体就会使得自己添加的字库无法生效。(2.1 ) 在ANDROID L上同时需要在framework/base/data/fonts/目录下FONTS.XM文件中加入定义如
Roboto-Thin.ttf
(weight代表字体的粗细 style是字体风格。可以根据贵司自定义字库和FONT文件中的字库定义)(其他android版本无需这个步骤)修改fonts.mk (frameworks/base/data/fonts)
a、ICS
PRODUCT_COPY_FILES := \
……
frameworks/base/data/fonts/NewFontFile.ttf:system/fonts/myfont.ttf \
b、JB
PRODUCT_PACKAGES:= \
myfont.ttf \
DroidSansFallback.ttf \
……- 对于JB2,JB3,JB5,JB9,KK,L还需修改Android.mk
ifeq ($(MINIMAL_FONT_FOOTPRINT),true)
……
else # !MINIMAL_FONT
font_src_files +=
myfont.ttf \
……
5.对于GB版本的添加方法如下
1) 拷贝myfont.ttf文件到 alps\frameworks\base\data\fonts下
2) 修改frameworks/base/data/fonts/Android.mk文件:
copy_from := \
DroidSansMono.ttf \
myfont.ttf\
……
3) 修改external/skia/src/ports/SkFontHost_android.cpp 文件:
//增加以下语句
{“myfont.ttf”, gFBNames}, - 重新编译工程,download bin到手机测试。
4、翻译字符串
(1)在frameworks/base/core/res/res/下新增加一个values-sw-rTZ的文件夹,新建一个strings.xml文件,把frameworks翻译内容放在这个文件内:
(2) 对每个app做翻译,在每个app对应的res目录下面建立values-sw文件夹,并将翻译好的strings.xml放在里面;
5、重新Build整个工程
6、如果所添加的语言在ISO_639-1没有定义2个字母编码.
(1)自己定义ISO_639-1里面没有的2个字母组合如xx
(2)使用xx按照第2大步添加ICU资源
(3)在frameworks的res下新建values-xx-rYY文件夹(YY为国家码),并把string.xml放进去。其他模块string.xml可以放到values-xx下。
(4)ProjectConfig.mk文件的宏 MTK_PRODUCT_LOCALES处使用xx_YY.
7、对于一些复杂语言除了添加字库、icu资源和翻译以外,还需要有字体引擎,比如缅甸语,波斯语,藏语等。对于mtk支持的语言(FAQ03761)已有对于复杂语言的处理引擎,如果要添加新的复杂语言需要添加相应的处理引擎。一般复杂语言会具有如下部分特征:
(1)显示或者输入方向从右到左 。
(2)字符之间会发生变形或者替换。
(3)一般复杂语言的使用的字符都是非iso8859编码格式(欧洲使用)和非中日韩字符。