一看这个标题《这个面试有点硬安卓汉化》,就知道这活儿肯定不轻松。就是闲不住,看到不顺眼的全是“鸟语”的应用或者小玩意儿,心里那股劲儿就上来了:非得把它整成咱能看懂的中文不可。

一、前期侦查:老三样走起

拿到这个包,二话不说,我先把逆向那几把“板斧”全亮出来了。第一个试探就是最常规的路子——APKTool反编译,想要直接奔着资源文件去。因为一般来说,安卓应用的文字串儿都老老实实地待在`res/values/*`里头。

结果?

打开一看,傻眼了。

资源文件里的字符串少得可怜,要么就是一些系统自带的,压根儿没见到应用里大段大段的英文。这明显就是开发者搞了“小动作”,把真正的文字内容藏起来了,或者用了某些第三方框架来自定义了资源的加载方式。

二、硬核开啃:深入SMALI

既然常规路子行不通,那就只能动真格的了。我赶紧把包扔进了JADX里头,准备硬啃Java代码。这应用既然能显示文字,那肯定就有加载文字的地方。

小编温馨提醒:本站只提供游戏介绍,下载游戏请前往89游戏主站,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区

我的战术是:

  • 我先找应用里最显眼、最短、最容易识别的那几个英文短语,比如“Start Game”、“Settings”或者“Game Over”,然后用JADX的搜索功能定位它们在Java代码里的位置。
  • 定位后,我发现文字果然不是直接从标准的`*`里取的,而是通过一个统一的加载函数,用一个数字ID或者一个特殊的Key去取值。
  • 我顺着这个加载函数一路往上追,就像是福尔摩斯找线索一样,终于被我揪出了幕后那个巨大的字符串表,它多半是被打包进了某个类文件里,以数组的形式存在。这个表,就是我要的“藏宝图”。

三、动手实践:数据替换与回封

找到表就好办了,但麻烦也来了。那个表里密密麻麻全是英文原句和对应的ID。我得把它们一个一个翻译然后回到最原始的SMALI文件里去进行替换。这个过程,那叫一个磨人,比写代码还累。因为SMALI代码,你稍微动错一个标点符号、一个寄存器引用,整个应用就崩给你看。

我采取了最稳妥,也是最笨的办法:只替换数据,不动逻辑。

我小心翼翼地把字符串数组里的每一个英文句子,都换成了我准备好的简体中文。为了保险起见,我甚至没敢改中文本身的长度,尽量保持和英文长度近似,防止破坏了内存布局。那段时间,我感觉自己的眼睛都快被那些`Ljava/lang/String;`和各种数字编号给焊住了。

四、我的个人小九九

要说我为啥非要跟这么个硬骨头死磕大半天?说起来有点好笑。那天是我老婆让我整理家里的杂物间,说是再不整理就要把我的那些老古董硬盘全扔了。我一听就急了,这可是我多年的“知识储备”。

但我又不想真去整理,怎么办?我就坐在电脑前故作深沉,跟我老婆说:“老婆,我今天有个紧急的‘文化交流’任务,关系到几亿用户的使用体验,不能被打扰。”

我就是为了躲避整理家务,才抓起这个汉化包,给自己找了个“正当”的理由在电脑前坐着。当我把全部替换完,重新打包、签名,然后顺利运行,看到所有界面都变成了清晰的中文时,那成就感,比我整理一百个杂物间都强。

这个“面试”确实够硬,但实践出真知,全程七八个小时,我不仅躲过了家务,还把这种非标资源的汉化路子摸透了。以后再碰到这种“藏着掖着”的开发者,咱也有经验应付了。

免责声明:喜欢请购买正版授权并合法使用,此软件只适用于测试试用版本。来源于转载自各大媒体和网络。 此仅供爱好者测试及研究之用,版权归发行公司所有。任何组织或个人不得传播或用于任何商业用途,否则一切后果由该组织及个人承担!我方将不承担任何法律及连带责任。 对使用本测试版本后产生的任何不良影响,我方不承担任何法律及连带责任。 请自觉于下载后24小时内删除。如果喜欢本游戏,请购买正版授权并合法使用。 本站内容侵犯了原著者的合法权益,可联系我们进行处理。