我是怎么被逼着自己动手的:起因
兄弟们,今天咱聊点实打实的东西,就是前段时间我折腾那个《种马》安卓汉化的事儿。这活儿不是人干的,但干完之后那成就感,真叫一个爽。
这事儿得从我去年夏天说起。当时我在家里头无聊到快长蘑菇了,在网上瞎逛,偶然摸到了一个国外的论坛,发现一个游戏,画面是真他娘的精致。问题是,那玩意儿只有日文版,连个英文机翻都没有,更别提安卓版了。我心想这么好的东西,难道只能看图猜字?不行,老子不信这个邪。
我立马就决定自己搞一套出来。我之前虽然也捣鼓过一些PC游戏的汉化补丁,但安卓这套东西我真没碰过,全靠一股子蛮劲和对那画面的执念。
第一步:扒皮拆骨,寻找真身
第一件事,得把那个日文的安装包搞到手。我费了九牛二虎之力,终于在某个角落里挖到了原版APK。拿到手我没着急装,直接扔进电脑里,找了个我以前用来拆包看结构的小工具,二话不说,咔嚓一下给它来了个大卸八块。
我以为文字资源肯定就是放在那个叫“Assets”或者“Resources”的文件夹里,毕竟PC游戏都是这么干的。结果?我对着那一堆文件包瞪了快一个礼拜,全他妈是乱码,各种后缀名我见都没见过。根本就不是那种常见的文本文件,甚至连图片资源都加密得严严实实。
那段时间我真是焦头烂额,晚上睡觉都在想那几个加密文件的后缀名。没办法,我只能去翻那个游戏用的引擎的公开资料。这一查我才发现,这帮老外为了防盗版,把文本都混在了某个特制的资源包里头,还用了它们自家的一套索引方法。我的老天爷,这哪里是汉化,这是要我先去破解加密算法!
第二步:硬啃引擎,暴力提取
我花了三天时间,翻遍了国内国外所有能找到的帖子,终于找到了一个开源的、能对付这种特殊资源格式的小程序。这程序虽然是为PC版设计的,但我觉得底层逻辑应该差不多。
我把它抓过来,对着那个安卓包里的资源文件,一顿猛操作。终于,在一个很不起眼的文件夹里,我看到了熟悉的影子——一大堆序号开头,后缀名是.txt但内容全是乱码的文件。我当时就激动了,这肯定是文本!
- 我做的第一件事:用一个十六进制编辑器打开它,找到了文字区域的开头和结尾标记。
- 我做的第二件事:修改那个开源小工具的脚本,让它只抓取标记之间的内容。
- 我做的第三件事:用脚本批量跑了一遍,把所有日文文本都抽了出来,扔进了一个巨大的Excel表里。
抽出来之后我发现,文本量比我想象中要大得多,密密麻麻,一眼望不到头。但起码,这回不是乱码了,我能看到日文原文了。光是这个提取过程,就耗了我整整两个星期。
第三步:翻译润色,人工校对
文本是出来了,但翻译又是个大问题。我日语水平顶多N4,靠我自己肯定不行。这时候我就想起了我大学时认识的一个哥们,他对二次元文化了解得透透的。我连哄带骗,请他吃了顿饭,又承诺他第一个玩到汉化版,他才勉强同意帮我。
我们俩分工明确:
我负责:用翻译软件进行第一遍机翻,把大致意思搞出来,并管理Excel表的对应关系,确保翻译后的中文序号跟日文序号对得上。
我哥们负责:对那些核心的、口语化的、带梗的句子进行人工润色和校对,确保翻译出来的东西不会让人觉得是机器人在说话。尤其是一些特殊场景的台词,那语气、那感觉,差一点都不行。
这阶段足足干了一个月,我们每天晚上都对着那几千条数据。有时候一个词,为了找到最恰当的中文表达,我们能吵半小时。但效果是显著的,最终我们搞出了一份质量过硬的中文文本。
第四步:回填封装,反复测试
文本搞定了,最关键的一步来了:把中文塞回去,并且让安卓系统认得它。
我把翻译好的中文重新扔回到之前那个资源文件里,这回要做的就是反向操作——用脚本把中文文本替换掉原来的日文,然后重新生成那个特殊的资源包。听起来简单,做起来差点要了我的命。
我第一次替换完,重新用工具把整个APK打包,签名,安装到手机上,兴冲冲地打开……结果白屏,直接闪退了。
我当时真想把手机砸了!反复检查日志,发现是中文字符集的问题。原来的引擎它就没打算支持中文,对UTF-8的支持特别粗糙。我不得不又在资源回填的脚本里加了一堆代码,专门处理中文的编码格式和长度限制。
- 第一次闪退:字符编码冲突。
- 第二次乱码:某些特殊符号解析失败。
- 第三次卡死:文本长度超过了引擎预设的内存限制。
就这么反复折腾了不知道多少回,每次修改一点,都要重新打包、签名、安装、测试。直到有天晚上,我随手点开,看到了那句熟悉的开场白,但这回是纯正的简体中文!那一瞬间,我差点叫出来。虽然中间还有零星的bug,偶尔会跳出日文,但主体流程已经跑通了。
这回折腾,我算是把安卓打包、资源加密、字符编码这几套流程摸了个门儿清。虽然累得跟狗一样,但看到手机里运行着自己汉化好的游戏,啥都值了。这玩意儿,只要你肯动手,就没什么是搞不定的。好了,我的实践记录就分享到这里,大家有啥想折腾的,尽管留言。