Android MTK开发时区修改.docx

上传人:b****7 文档编号:8690239 上传时间:2023-02-01 格式:DOCX 页数:10 大小:238.71KB
下载 相关 举报
Android MTK开发时区修改.docx_第1页
第1页 / 共10页
Android MTK开发时区修改.docx_第2页
第2页 / 共10页
Android MTK开发时区修改.docx_第3页
第3页 / 共10页
Android MTK开发时区修改.docx_第4页
第4页 / 共10页
Android MTK开发时区修改.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Android MTK开发时区修改.docx

《Android MTK开发时区修改.docx》由会员分享,可在线阅读,更多相关《Android MTK开发时区修改.docx(10页珍藏版)》请在冰豆网上搜索。

Android MTK开发时区修改.docx

AndroidMTK开发时区修改

[FAQ06455]【Zone】如何添加一个新的时区

问题描述:

有些项目需要出货到海外,比如非洲的一些国家,目前的版本中这些国家没有单独的时区,而是使用的如非洲东部时间,非洲标准时间等,为了提高当地用户体验,需要在setting菜单中增加一个时区,比如为出货到尼日尼亚的手机增加时区尼日尼亚拉各斯。

 

解决方案:

以加入Nigeria时区为例,应该如下修改:

1.找到该国家在zoneinfo中的时区信息。

时区信息的文件可以从ftp:

//munnari.oz.au/pub/下载到最新的,解压tzdata201x*.tar.gz后,在每个地区的txt文件中有城市的时区信息,搜索是否有您要添加的城市,则该时区可以添加;如果没有搜索到相关的国家或城市,则需要考虑使用别的城市的时区。

比如在africa.txt中搜索Nigeria,可以找到下面的内容:

#Nigeria

#Zone NAME  GMTOFF RULES FORMAT [UNTIL]

Zone Africa/Lagos 0:

13:

36- LMT 1919Sep

   1:

00 - WAT

这样可以看到,尼日利亚只有一个城市可以作为时区ID,这个ID就是Africa/Lagos。

 

2.修改packages/apps/Settings/res/xml-xx-xx/timezones.xml(xx-xx表示不同的语言和区域),添加下面的内容:

   

--timezones.xml用于在setting中增加一个时区设置项-->

   Lagos

 

3.修改framework/base/core/res/res/xml/time_zones_by_country.xml,添加下面的内容

   

--time_zones_by_country.xml这个用于自动匹配时区时使用,通过countrycode找一个时区-->

   

--Nigeria,1:

00-->

   Africa/Lagos

   

--这里的code="ri"表示国家代码,比如中国对应cn,美国对应us,不清楚可以维基百科查询ISO_3166-1-->

 

这是添加一个时区的步骤,如果要添加多个时区,请重复或批量执行以上步骤。

 

[FAQ08718]如何在ICU中自定义某个时区的显示名称

【Description】:

目前对于有些地区,很多国家会使用一个时区,显示的名称也是一样,比如对于欧洲,很多城市使用“欧洲中部时间”“中欧夏令时”,非洲国家也是类似的。

对于有些客户,可能有定制显示需求,对于某些时区,不显示“xx中部时间”,而是显示“xx时间”,比如下面会以荷兰阿姆斯特丹为例,目前在手机Setting中选择“Amsterdam,Berlin”后在Date&Time界面会显示“CentralEuropeanSummerTime”,下面是修改荷兰语下这个显示为自定义名称的过程。

【Solution】:

时区Europe/Amsterdam目前显示出来的时间是“欧洲中部时间”或“欧洲中部时间”,如果要修改荷兰语下显示为“阿姆斯特丹时间”或其他自定义的显示,请follow下面的修改:

1.找到时区ID

时区id并不是城市名称,手机显示到时区列表上的时区名称与时区id有映射关系,可以通过查看Settings中的timezones.xml来确定,package/apps/Settings/res/xml-zh/timezones.xml是中文。

这样可以找到Amsterdam,Berlin的时区id是Europe/Amsterdam。

2.修改metaZones.txt文件

1)修改mapTimezones

修改的目的是把时区添加到自己定义的显示规则中,这样通过时区IDEurope/Amsterdam就可以得到该显示规则Europe_Amsterdam。

这个步骤分2步:

a)定义自己的显示规则名称

比如我定义了新的规则Europe_Amsterdam,需要在mapTimezones中添加进去,mapTimezones中顺序是按字母排序的,所以Europe_Amsterdam这个规则要添加到Europe_Central的前面,如下:

Europe_Amsterdam{

}

b)将要修改的时区从原规则中删除,添加到自定义的规则中

找到要修改的时区,比如Europe/Amsterdam在Europe_Central中,

剪切NL{“Europe/Amsterdam”},粘贴到自定义的时区显示规则中,如下所示:

Europe_Amsterdam{

NL{"Europe/Amsterdam"}

}

2)修改metaZoneinfo

添加meta信息,这样就可以通过显示规则名称Europe_Amsterdam得到meta信息Europe:

Amsterdam。

"Europe:

Amsterdam"{

{

"Europe_Amsterdam"

}

}

3.修改zone/nl.txt文件

不同的txt文件代表的是不同语言,语言和区域代码可通过查询ISO-3166-1和ISO-639标准确定。

定义在界面显示的字串,这样根据之前得到的meta信息可以得到要显示的字串。

同样的,名称是按照字母排序的,所以在Europe_Central前面添加,如下:

"meta:

Europe_Amsterdam"{

ld{"夏令时间显示名称"}

ls{"标准时间显示名称"}

}

4.编译ICU资源

请参考FAQ04011进行编译和测试

[FAQ04011]如何编译ICU资源

如果只是测试修改后效果,执行步骤A即可;如果需要build后生效,则需要执行全部步骤

A.在临时目录中编译ICU资源

1.在external/icu4c下新建临时目录icubuild,进入icubuild目录

$mkdirexternal/icu4c/icuBuild

$cdexternal/icu4c/icuBuild

2.执行icuConfigureRunLinux命令,生成make文件

$.././runConfigureICULinux

3.执行make-j2命令

$make-j2

4.将生成的external/icu4c/icuBuild/data/out/tmp/icudt48l.datpush到手机测试

$adbremount

$adbpushexternal/icu4c/icuBuild/out/data/tmp/icudt48l.datsystem/usr/icu/

$adbreboot(千万记得重启手机才看得到修改后的效果)

注:

JB及以上是icudt48l.dat

B.COPY所需文件

将第一步生成的external\icu4c\icubuild\data\out\tmp\icudt48l.dat复制到external\icu4c\stubdata下并改名为icudt48l-all.dat,覆盖原来的同名文件

注:

JB及以上是icudt48l.dat和icudt48l-all.dat

C.配置环境变量

重新配置环境变量(如果不配置正确会导致执行脚本出错)。

以我的系统为例,配置过程如下:

1.  在终端中进入/work/pro/c70_u10_y320/mt6572_jb3目录即:

   $cd/work/pro/c70_u10_y320/mt6572_jb3  

2.  然后执行脚本(等价于./build/envsetup.sh):

 $sourcebuild/envsetup.sh

3.  配置环境变量(注意“=”前后不要有空格)。

$exportANDROID_BUILD_TOP=/home/ckt/work/pro/c70_u10_y320/mt6572_jb3

执行完没有任何提示说明配置成功。

执行完没有任何提示说明配置成功,有提示说明配置出错。

需要重新配置

D.执行脚本,重新生成.dat文件

执行脚本,如果遇到文档印尼语错误请用附件(或MTK)提供的脚本(icu_dat_generator.rar)替换后再执行,如下所示:

1.进入/work/pro/c70_u10_y320/mt6572_jb3/external/icu4c/studdata目录

$cdexternal/icu4c/stubdata

2.执行脚本

$./icu_dat_generator.py

如果该脚本执行成功,external\icu4c\stubdata\icudt48l-default.dat会更新,如果看到文件的修改时间变成了最新的时间,就说明已经重新生成,真正最后起作用的是icudt48l-default.dat这个文件。

注:

JB及以上是icudt48l-default.dat

E.重新编译工程

修改后重新编译工程来测试效果,使用./mkckt72_we_jb3new命令

F.上传.dat文件到SVN

如果你使用svn或类似软件进代码管理,那么就要将你修改的结果上传到服务器上,使服务器new或build之后可以看到修改效果。

需要上传那些文件呢?

请将studdata目录下的icudt48l-default.dat文件上传。

说明:

实际上脚本的作用就是将icudt48l-all.dat解压后,根据txt文件内容重新生成icudt48l-default.dat文件,在build的时候Android.mk文件会直接将icudt48l-default.dat文件改名后复制到最终out目录中,所以上传到服务器只需要将生成的这些.dat文件传上去,其它在本机修改的都不用(如果传上去可能会build出错)。

根据上面的FAQ文档做了两个实验

实验一。

在ICU中添加某个时区并显示自定义名称,同时开机向导中也显示此修改的自定义名称

【问题描述】添加时区Abidjan

步骤:

1.在frameworks/base/core/res/res/xml/time_zones_by_country.xml中搜索是否存在有关Abidjan的时区ID。

--COTED'IVOIRE,0:

00-->

Africa/Abidjan//时区ID

2.在packages/apps/Settings/res/xml/timezones.xml中搜索时区ID是否存在时区设置项(Settings->Date&time->Selecttimezone)对应的名称。

如果没有可以按照timezones.xml其它时区编写规则添加:

Abidjan

3.在external/icu4c/data/misc/metaZones.txt中搜索是否有匹配时区idAfrica/Abidjan的mapTimezones。

搜索结果:

GMT{

001{"Atlantic/Reykjavik"}

BF{"Africa/Ouagadougou"}

CI{"Africa/Abidjan"}//在这里

GB{"Europe/London"}

GH{"Africa/Accra"}

GM{"Africa/Banjul"}

GN{"Africa/Conakry"}

IE{"Europe/Dublin"}

LR{"Africa/Monrovia"}

ML{"Africa/Bamako"}

MR{"Africa/Nouakchott"}

SH{"Atlantic/St_Helena"}

SL{"Africa/Freetown"}

SN{"Africa/Dakar"}

ST{"Africa/Sao_Tome"}

TG{"Africa/Lome"}

}

由结果可知该时区ID会显示格林治标准时区,如何修改为自定义的时区呢?

(1)删除CI{"Africa/Abidjan"}这项

(2)mapTimezones中自定义时区规则,由于mapTimezones中顺序是按字母排序的,所以将Africa_Abidjan这个规则添加在Afghanistan{001{"Asia/Kabul"}}规则之后。

Africa_Abidjan{

001{"Africa/Abidjan"}

}

(3)metazoneInfo添加meta信息(按字母排序)

"Africa:

Abidjan"{

{

"Africa_Abidjan",

}

}

4.在external/icu4c/data/zone/en.txt中添加显示字符串(按字母排序)

"meta:

Africa_Abidjan"{

ls{"AbidjanTime"}//自定义字符串

}

到此修改就结束了,修改完后可以按照[FAQ04011]如何编译ICU资源编译验证,

如果要设置开机向导显示自定义时区,即设置默认时区

需要在mediatek/config/ckt72_we_jb3/ProjectConfig_ckt.mk中设置TIMEZONE=Africa/Abidjan

验证图片:

1.开机向导显示添加时区

 

2.自定义字符串

3添加时区选项

 

实验二。

添加一个新时区

【问题描述】添加新时区乌鲁木齐Urumqi+8:

00

先上图

步骤跟上面添加Abidjan时区大同小异,举这个例子是想说明:

在metaZones.txt中搜索到的有关Urumqi的metazoneInfo代码是

"Asia:

Urumqi"{

{

"Urumqi",

"1970-01-0100:

00",

"1980-04-3018:

00",

}

{

"China",

"1980-04-3018:

00",

"9999-12-3123:

59",

}

}

 

必须修改为

"Asia:

Urumqi"{

{

"Urumqi",//meta信息用于跟en.txt文件中meta信息作匹配,如果两个文件}里的meta信息不一样,自定义的字符串就不会显示,修改不正确

}此处会显示为GMT+8:

00,GMT+8:

00

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1