您的位置:首页 > 移动开发 > Android开发

[转]Android Recovery汉化

2014-04-01 10:42 459 查看
http://www.manong.net/forum.php?mod=viewthread&tid=61

[align=left]1、简介[/align]
[align=left]由于部分用户对洋文recovery会产生头痛症状的bug, 决定汉化recovery。[/align]
[align=left]2、基础知识[/align]
[align=left]1)编码[/align]
[align=left]ASCII、GB2312、Unicode、UTF8[/align]
[align=left]ASCII[/align]
ASCII(美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

ASCII 码使用指定的7
位或8
位二进制数组合来表示128
或256
种可能的字符。标准ASCII
码也叫基础ASCII码,使用7
位二进制数来表示所有的大写和小写字母,数字0
到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10
和13
分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
[align=left]32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字[/align]
[align=left]65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。[/align]
[align=left]同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。 [/align]
后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII
码允许将每个字符的第8
位用于确定附加的128
个特殊符号字符、外来语字母和图形符号。
[align=left]file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-16626.png[/align]
[align=center]图 1 ASCII表[/align]
[align=left]GB2312[/align]
GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。

[align=left]它是计算机可以识别的编码,适用于汉字处理、汉字通信等系统之间的信息交换。基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。[/align]
每个汉字也都有在GB2312中的区位码,用两个字节表示。

[align=left]汉字编码范围,区码:B0 ~ F7,位码:A1 ~ FE[/align]
[align=left]汉字编码后续标准如,GB18030, 对GB2312完全兼容。[/align]
[align=left]code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F[/align]
[align=left]B0A0     啊 阿 埃 挨 哎 唉 哀 皑 癌 蔼 矮 艾 碍 爱 隘[/align]
[align=left]B0B0  鞍 氨 安 俺 按 暗 岸 胺 案 肮 昂 盎 凹 敖 熬 翱[/align]
[align=left]B0C0  袄 傲 奥 懊 澳 芭 捌 扒 叭 吧 笆 八 疤 巴 拔 跋[/align]
[align=left]B0D0  靶 把 耙 坝 霸 罢 爸 白 柏 百 摆 佰 败 拜 稗 斑[/align]
[align=left]B0E0  班 搬 扳 般 颁 板 版 扮 拌 伴 瓣 半 办 绊 邦 帮[/align]
[align=left]B0F0  梆 榜 膀 绑 棒 磅 蚌 镑 傍 谤 苞 胞 包 褒 剥   [/align]
[align=left]...[/align]
[align=left]...[/align]
[align=left]...[/align]
[align=left]code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F[/align]
[align=left]F7A0     鳌 鳍 鳎 鳏 鳐 鳓 鳔 鳕 鳗 鳘 鳙 鳜 鳝 鳟 鳢[/align]
[align=left]F7B0  靼 鞅 鞑 鞒 鞔 鞯 鞫 鞣 鞲 鞴 骱 骰 骷 鹘 骶 骺[/align]
[align=left]F7C0  骼 髁 髀 髅 髂 髋 髌 髑 魅 魃 魇 魉 魈 魍 魑 飨[/align]
[align=left]F7D0  餍 餮 饕 饔 髟 髡 髦 髯 髫 髻 髭 髹 鬈 鬏 鬓 鬟[/align]
[align=left]F7E0  鬣 麽 麾 縻 麂 麇 麈 麋 麒 鏖 麝 麟 黛 黜 黝 黠[/align]
[align=left]F7F0  黟 黢 黩 黧 黥 黪 黯 鼢 鼬 鼯 鼹 鼷 鼽 鼾 齄   [/align]
[align=left]unicode[/align]
[align=left]通用字符集[/align]
[align=left]UTF8[/align]
[align=left]可变长编码,汉字3字节表示。具体可参考RFC3629。[/align]
[align=left]D2BB  4E00  E4 B8 80  一[/align]
[align=left]B6A1  4E01  E4 B8 81  丁[/align]
[align=left]C6DF  4E03  E4 B8 83  七[/align]
[align=left]CDF2  4E07  E4 B8 87  万[/align]
[align=left]D5C9  4E08  E4 B8 88  丈[/align]
[align=left]C8FD  4E09  E4 B8 89  三[/align]
[align=left]C9CF  4E0A  E4 B8 8A  上[/align]
[align=left]CFC2  4E0B  E4 B8 8B  下[/align]
[align=left]D8A2  4E0C  E4 B8 8C  丌[/align]
[align=left]...[/align]
[align=left]...[/align]
[align=left]...[/align]
[align=left]F6B8  9F88  E9 BE 88  龈[/align]
[align=left]F6B9  9F89  E9 BE 89  龉[/align]
[align=left]F6BA  9F8A  E9 BE 8A  龊[/align]
[align=left]C8A3  9F8B  E9 BE 8B  龋[/align]
[align=left]F6BB  9F8C  E9 BE 8C  龌[/align]
[align=left]C1FA  9F99  E9 BE 99  龙[/align]
[align=left]B9A8  9F9A  E9 BE 9A  龚[/align]
[align=left]EDE8  9F9B  E9 BE 9B  龛[/align]
[align=left]B9EA  9F9F  E9 BE 9F  龟[/align]
[align=left]D9DF  9FA0  E9 BE A0  龠[/align]
[align=left]2)OpenGL[/align]
OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。

[align=left]file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-23313.png[/align]
[align=center]图2 OpenGL渲染管线[/align]
[align=left]file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-7388.png[/align]
[align=center]图3 像素数据处理流程简图[/align]
[align=left]1、像素操作[/align]
[align=left]对数组像素进行操作[/align]
[align=left]2、纹理装配[/align]
[align=left]生成纹理[/align]
[align=left]3、光栅化[/align]
[align=left]截取字符纹理片段,生成纹理单元[/align]
[align=left]4、片段操作[/align]
[align=left]对纹理单元进行操作,(着色,各种测试(alpha..),雾化)[/align]
[align=left]3)Pixelflinger[/align]
Pixelflinger是Android系统中为OpenGL ES引擎提供的一套软件渲染器(renderer)。OpenGL
ES引擎提供了一系列基础绘图功能。这些功能包括定义各种颜色格式像素位置、画点画线、绘制矩形及三角形、填充纹理等等。由于OpenGL ES相当于一个状态机,配置OpenGL
Es状态的函数也均由Pixelflinger提供。
[align=left]Pixelflinger涉及到的代码路径:[/align]

?
[align=left]Pixelflinger有两个主要结构体[/align]

?
其中context_t是pixelflinger里最主要的结构体,GGLContext
提供了外部操作引用接口。

?
这些接口的真正实现在/system/core/libpixelflinger/pixelflinger.cpp里面。

在我们下面的程序里面,主要用到一些结构体。

当然在使用pixelflinger前,需要对其进行初始化gglInit(),初始化GGLContext结构体。

?
[align=left]其实这个函数主要就是使用ggl_init_context()初始化context_t结构体,ggl_init_context()用于初始化context_t结构体中的环境、参数等。然后在GGLContext中引用context_t以对外提供接口。[/align]
[align=left]GGLContext中对外接口初始化主要在ggl_init_context()->ggl_init_procs()完成。[/align]

?
[align=left]Pixelflinger中的屏幕刷新机制,[/align]
[align=left]定义了两个帧缓冲区,gr_framebuffer[2][/align]
[align=left]获取缓冲区设备,get_framebuffer()[/align]
[align=left]3、recovery基本流程[/align]
[align=left]int main(int argc, char **argv)[/align]
[align=left]        --->ui_init()[/align]
[align=left]        --->ui_set_background(BACKGROUND_ICON_INSTALLING)[/align]
[align=left]        --->load_volume_table()[/align]
[align=left]        --->get_args(&argc, &argv)[/align]
[align=left]在/recovery/minui/grapics.c内进行[/align]
[align=left]字库初始化[/align]
[align=left]字库索引[/align]
[align=left]4、汉化流程[/align]
[align=left]1)总流程[/align]
[align=left]file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-28211.png[/align]
[align=left]2)字库制作[/align]
[align=left]通过GIMP_IMAGE 将字库图片转换生成字库图片源码C文件,/minui/mkfont.c将源码C文件压缩成字库头文件。[/align]
[align=left]注意:生成的头文件,注意修改结构体名以及相应cwidth和cheight(字符长宽)[/align]
[align=left]字库将在代码内初始化[/align]
[align=left]file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-8312.png[/align]
[align=left]3)代码修改[/align]
[align=left]字库初始化[/align]

?
[align=left]字库索引[/align]

?
[align=left]5、其他问题与移植性[/align]
[align=left]/**[/align]
注:

1、以上是基于GB的汉化标准,所以保存文件时要注意保存为GB编码类型,保存为UTF8编码可能导致显示乱码问题

2、汉化后的recovery 只支持中文,无法进行中英文或其他语言切换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android