这是我的 @布加迪20 AZ在一篇文章中写道:<汉化so文件的心得>中的技术附件做的简洁性整理。原来的看起来不是非常方便。一起分享学习..
正文

SO文件汉化心得

--By布加迪20   2014/08

我自己也是新手。研究了好久。网上也找不到相关教程。所以决定写一个比較具体的教程。教程是关于汉化so文件时出现的字符串长度不够的问题,后面还有做字库的简单教程。相关文件都在文章结尾处,假设出现排版问题。建议在手机上用WPS看,选适应手机就好了。

汉化so改动偏移

IDA在电脑上用。HE是安卓上的十六进制编辑器HexEditor。以“浮游生物2:孢子的世界”(版本号1.0.1.1)为例。手机上用HE打开libcocos2dcpp.so,找到“MostDepth:"如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemloYW8yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

(libcocos2scope.so能够用Xplore管理器导出,长按安装包。选以zip方式打开。在lib里)记下M的位置为004eea07。

“START”和“Most Depth:”相应游戏中位置,例如以下图:

能够看到,“Most Depth:"前面的“START"要汉化成“開始”位置不够(一个汉字抵三个字母,每一个词前后都要有00隔开),而后面的“Most Depth:"能够改成“MostDepth:"也能够汉化为“最深处:”,也就能够在“START"后面移出一个空格,正好能够汉化为“開始”。如图:

记下这时M的位置为004eea08。可是这时侯“START”偏移没变,“MostDepth:"的偏移变了,游戏里是显示不出的:

以上在手机上完毕,电脑上能够用其他十六进制编辑器,推荐UE32。

这时候就须要用到IDA,用IDA打开电脑上的so文件,在“查找”里选“文本”,输入“Most Depth:"(我电脑里的还是原文件)。找到这里

记下198112 。

然后打开一个十六进制计算器,用之前“Most Depth:"里M的位置减去198112,即“4eea07-198112”。得到3568f5,这时候要用HE在so文件中搜索f56835(要反过来),找到了。

我们要改的就是这个,之后用改过的“MostDepth:"里M的位置减198112。即“4eea08-198112",得3568f6,之后要做的就是把“f56835"改成“f66835",如图:

接下来保存文件,打开游戏測试吧

能够看到,“MostDepth:"已经显示出来了。

做字体库汉化

当然,要汉化这个游戏还须要做字库,下面附简单教程。

字库我是用hiero做的。游戏里的字库都在assests/fonts里:

 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemloYW8yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

有7种字,每种都要做一个,打开hiero,以segoe_ui-16_0.png和segoe_ui-16.fnt为例:

选微软雅黑(我认为和游戏字体挺像),在右边的“Sample Text"里输入“開始”,并选定字号为16。选“Glyph cache"。把宽高都设为2048(方便以后字多了能够一张图解决)。

软件有点问题,所以Rendering里没有显示字体,只是无论它,点File→Save BMF on files (text)...。文件名称就写“segoe_ui-16_0.fnt",点保存就会生成两个文件“segoe_ui-16_0.fnt”和“segoe_ui-16_0.png",注意之后把“segoe_ui-16_0.fnt”改成“segoe_ui-16.fnt”。

其它字体以同样的方式生成,然后替换assests/fonts里的字体(教程里的仅仅添加了“開始”两个字)。

然后用HE打开so文件,我们刚刚在“START"后面添加了一个空格,能够改成“開始”了。用HE搜索到“START ”,并查到“開始”的十六进制为“e5 bc 80 e5 a7 8b”。替换掉原来的。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemloYW8yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

打开游戏看看效果:

能够看到汉化成功了“開始”。



借助“空位”汉化so

这是我自己的汉化心得。拿出来分享一下,这个教程仅仅是简介一下添加字符串长度的一种方法。适用于前后有多余的空位(一般是汉化其他语句留下来的),只是要是前后都没有空位,就要用还有一种方法

这样的方法事实上也是改动偏移,看这里的字符串:

一大堆挤在一起。汉化成中文位置根本不够,可是我们能够看到so文件中有非常多空白的地方,比方这里:

看这里有这么大一片空白,足够我们改了!随便从哪里開始,比方我想把“Game Over”改成“游戏结束”。

就在把任何位置的空字符串替换成“e6b8b8 e6888f e7bb93 e69d9f”

(别忘了在字库里加入新的字。不然会出现两种情况:1.显示不出字。2.进游戏直接卡死。

)

接着依照上面的方法把“Game Over”的偏移改动到“游戏结束”的位置,就能够了。

注意

1、不是哪里的空白位置都能够改,这个叫空白数据段,通常像这样的前后都有字符串而中间空出来的一般就是了。(好像有寻找exe或dll数据段位置的工具,可是so的好像没有。所以不清楚是不是空白数据段时,能够自己改动试试)

2、每一次改动一定记得备份。改这样的十六进制的东西特别easy出错,假设没备份的话。后果非常严重。。。。。。

有关下载

以下是一些相关工具的链接,非常多版本号都低了。只是也没什么影响

浮游生物:孢子的世界

shareid=3428872989&uk=3324813120" title="http://pan.baidu.com/share/link?shareid=3428872989&uk=3324813120">http://pan.baidu.com/share/link?shareid=3428872989&uk=3324813120

Hex editor

shareid=3434074993&uk=3324813120">http://pan.baidu.com/share/link?shareid=3434074993&uk=3324813120

IDA

http://pan.baidu.com/share/link?shareid=3454802130&uk=3324813120

Hiero

shareid=3495231926&uk=3324813120" title="http://pan.baidu.com/share/link?

shareid=3495231926&uk=3324813120">http://pan.baidu.com/share/link?shareid=3495231926&uk=3324813120

Hiero(已有java环境的直接用)

http://pan.baidu.com/share/link?shareid=3510464528&uk=3324813120

Xplore文件管理器

http://pan.baidu.com/share/link?shareid=3543020754&uk=3324813120

原文完。谢谢全部技术的无私分享,交流才有有进步...

版权声明:本文博主原创文章,博客,未经同意不得转载。

so文件成品评论【整理】的更多相关文章

  1. 【我的Android进阶之旅】Android 混淆文件资源分类整理

    之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Studio新建项目时自动生成的文件里面,而随着项目功能迭代越来越多,代码量越来越多,引用的第二方库.第三方库都 ...

  2. podSpec文件相关知识整理

    上一篇文章整理了我用SVN创建私有库的过程,本文将整理一下有关podSpec文件的相关知识. podSpec中spec的全称是“Specification”,说明书的意思.顾名思义,这是用来描述你这个 ...

  3. 【Fine学习笔记】python 文件l操作方法整理

    python脚本可以对excel进行创建.读.写.保存成指定文件名,保存到指定路径的操作.整理了以下处理方法:   首先区别几个操作方式: "r" 以读方式打开,只能读文件 , 如 ...

  4. Javascript 文件操作(整理版)

    Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...

  5. day 10 字符编码和文件处理 细节整理

    pycharm是文本编辑器. 大概理解为:  输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...

  6. EBS预置文件作用收集整理

    在EBS之中,有很多的配置选项(profile),系统管理员只需要对它们做一些简单的配置,就可以达到控制流程开关.安全访问.个人喜好等等方面的要求. 以HR: Security Profile为例,该 ...

  7. 将excel按照某一列拆分成多个文件(方案整理)

    1解决方案:将excel按照某一列拆分成多个文件 https://blog.csdn.net/ntotl/article/details/79141314 2遇到的问题:解决vbe6ext.olb不能 ...

  8. 【总结】java 后台文件上传整理

    public Map<String,String> clientUploadAttachment(Long belongId, String fileSource, MultipartFi ...

  9. Spring读取加密属性文件处理--待整理

    引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...

随机推荐

  1. Redis 性能測试

    Redis 性能測试 Redis 性能測试是通过同一时候运行多个命令实现的. 语法 redis 性能測试的基本命令例如以下: redis-benchmark [option] [option valu ...

  2. jqgrid 实现行编辑,表单编辑的列联动

    这个问题的场景相信大家都遇到过,比方有A,B,C三列,B,C列均为下拉框.可是C列的值是由B列的值来决定的.即C列中的值是动态变化的,变化的根据就是B列中你选择的值. 本文给出的是一个有用,简易快捷的 ...

  3. Java与模式:装饰(Decorator)模式

    装饰模式使用被装饰类的一个子类的实例.把client的调用委派到被装饰类,装饰模式的关键在于这样的扩展是全然透明的.   装饰模式在Java种使用也非常广泛,比方我们在又一次定义button.对话框等 ...

  4. Nginx系列(二)--模块化

    高度模块化的设计设Nginx架构的基础. 在Nginx中,除了少量的核心代码,其它一切皆为模块.模块化设计具有下面特点: 1.高度抽象的模块接口 2.灵活性 3.配置模块的设计使Nginx提供了高可配 ...

  5. [CSS] Use Generated Content to Augment Information

    When you create a pseudo element, you have access to the parent HTML attributes. They can be used in ...

  6. js循环json数组

    例如数据库里面的json字符串是这样的 var str = '[{"name":"宗2瓜","num":"1",&quo ...

  7. Mysql 安装(Using Generic Binaries)

    本次 Mysql 为Community 5.6.21 版本号.安装方式为通用Linux安装方式.即大多数Linux平台都能够採用该方式进行安装. 一.安装步骤 1.安装环境 1)Centos 7.0. ...

  8. RabbitMQ 服务

    RabbitMQ 使用场景一   安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平 ...

  9. ExtJs中window用法

    1.显示html var htmlTitle = "<div style='width:100%;text-align:center'>"; var fruits = ...

  10. [React Router v4] Render Multiple Components for the Same Route

    React Router v4 allows us to render Routes as components wherever we like in our components. This ca ...