apk(安卓手机应用软件)解包汉化过程简单陈述 [转贴]

汉化资料到到是整理了不少,自己实践了一下,感觉做一些(除特别的外)基本汉化其实不难,今天跟大家分享一下个人整理收集的资料,有兴趣的朋友可以学习下。

APK文件简介: APK是Android Package的缩写, 即Android application package文件 或Android安装包。
每个要安装 到Android平台的应用都要被编译打包为 一个单独的文件,扩展名为 .apk。APK文 件是用专业软件eclipse编译生成的文件 包,其中包含了应用的二进制代码、资 源、配置文件等。通过将APK文件直接传 到Android手机中执行即可安装。
APK文 件其实就是zip格式,但其扩展名被改 为apk,在Windows下用解压软 件WinRAR/WinZIP/7-Zip可以直接打 开。解压后,你会看到有几个文件和文件 夹。
一个典型的APK文件通常有下列内容 组成:   

AndroidManifest.xml 程序全局配置 文件  

classes.dex Dalvik字节码

resources.arsc 编译后的二进制 资源文件

META-INF\ 该目录下存放的是 签名信息

res\ 该目录存放资源文件

assets\ 该目录可以存放一些 配置文件 下面对这些文件和目录做些基本的注释和 介绍:

AndroidManifest.xml 该文件是每个apk应用程序都必须包含的 文件,它描述了应用程序的名字、版本、 权限、引用的库文件等等信息。

classes.dex文件 classes.dex是java源码编译后生成 的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行 程序。利用解析工具可以将其转换 成java来加以阅读和理解。

resources.arsc 编译后的二进制资源文件。在做主题美 化时要常与这个文件打交道。

META-INF目录 META-INF目录下存放的是签名信息, 有三个签名文件,用来保证apk包的完整 性和系统的安全。

在eclipse编译生成一 个apk包时,会对所有要打包的文件做一 个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件 不能被随意替换。比如拿到一个apk包 后,如果想要替换里面的一幅图片,一段 代码, 或一段版权信息,想直接解压缩、 替换再重新打包,基本是不可能的。如此 一来就给病毒感染和恶意修改增加了难 度,有助于保护系统的安全。

res目录 res目录存放资源文件。包括图片,字符 串等等。res下有若干个子目录,主要 为drawable,layout,xml。 解包后,几乎所有可能的修改和编辑工作 基本都在这里。汉化ROM的主要工作就在 这里。汉化ROM实际上就是汉化所有 的apk应用程序的字符文件。

assets目录 assets目录可以存放一些配置文件,这 些文件的内容在程序运行过程中可以通过 相关的API获得。

下面以“设置”应用程序Settings.apk为 例。用WinRAR打开文件后,看到以上介 绍的六项内容。现在,即使你已经对文件 解压,你还是无法直接阅读每个文件的内 容。为了读出这些文件的内容,从而进行 进一步的修改和编辑,你就必须具有相应 的工具。

APK应用程序的解包和打包工具: 这一节主要介绍在Windows系统中常用 的几个工具包,用来对apk应用程序进行 解包、打包、反编译、解析 所有apk工具包都要求java

下面介绍一些收集的:
        dex2jar和XJad 该方法不是直接对apk文件进行解包。它是首先提取apk文件内的classes.dex文 件,然后使用dex2jar.jar工具包 将classes.dex解包成jar文件,再通 过XJad 或者其他class反编译工具进 行java反编译,最后生成java源文件。
        但是,使用这个工具包无法进 行classes.dex的还原(当然也无法进行apk的打包)。尽管如此,这个工具包 仍然很重要,因为它把classes.dex文件转 换成了可以更容易阅读的java源文件。在 修改apk应用程序时,必不可少,是一极 强的辅助工具。相比之下,apktool和apk manager反编译后得到的是Dalvik 反编译 码 (Dalvik opcodes),需要很专业的知 识来阅读,很不直观。如果你读懂 了java源文件,那修改相对应的Dalvik码 就容易多了…
      google Smali 有两个程 序:baksmali.jar和smali.jar。baksmali .jar用来反解析dex和odex文件,得 到Dalvik码。然后用smali.jar还原 成dex文件。例如,在修改状态栏时间显示颜色时,要用到的。
      AXMLPrinter2.jar对apk文件内的 AndroidManifest.xml和main.xml进行操作,将XML还原成文本文件,便于阅读。
      Apkdb 是一个集 成apktool,smali,Dex2jar,签名等功 能的工具。

这里讲apk汉化,首先说说apk
1 .apk解包后
2.在apk之下有两个文件夹 /res和/smali,还有两个文 件AndroidManifest.xml和apktool.yml 。用文本编辑器打 开AndroidManifest.xml看看,是不是在第一部分里介绍的内容。你要修改的内容 在/res文件夹内
3.打开/res文件夹,看到里面有5个子 夹,/drawable存放apk应用的图标 (Icon),drawable-hdpi(drawable-mdpi)存放其它要用的图形文件,(这些都可以美化替换,需要注意的是格式尺寸必须相 同,否则会出错…),/layout是apk的布局文件,/values里是字符文件。汉化apk就是汉化/alues文件夹 内string.xml文件的内容

APK字符汉化 (英小白,谷歌翻译…)

用Notepad++打开string.xml

我们只需汉化
xxxxxxxxxx</string>
成中文就好了。其他地方还有慢慢找。

一般有两种汉化方法: 1.正规汉化, 2 .强制汉化。
这里说的是解包后的apk

1.正规汉化
        一个apk应用在汉化后应该能在英文和中 文系统下都能使用。/values目录下的是英文语言包。为了建一个中文语言包,与/values并行创建一个子文件夹:/values-zh- rCN(必须用这个文件名!)。这里values-zh是中国地区语言包(包含港 澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。 把/values文件夹里的strings.xml等语言 文件复制进/values-zh-rCN。在一些软件中,只有strings.xml一个文件。 进入/values-zh-rCN,用文本编辑器打开strings.xml,然后你就翻译吧,把英文描述译成相应的中文。

例如,我们可以把上面的string.xml文件 译成: 静音启 动 开启 静音启动 关机 也是静音 关机 不是静音\n如果没有开启静音启动,关机 时播放开机音乐。 里面有个操作符“\n”是换行符,迫使换行 显示文本内容。之后存盘,用“另存 为”(Save As)存成UTF-8格式。这是保 持中文文本的格式。 在做汉化工作时,要对string.xml文件进行修改。有时也需要修改其它xml文件, 一个一个地认真查看,一个一个地汉化。

2.强制汉化  

        所谓“强制汉化”就是不产生/values-zh-rCN文件夹。而是在/values文件夹内把 需要汉化的文件都直接译成中文。显然, 如果在英文操作系统中没有中文字库的 话,强制汉化的apk在英文系统中可能显 示乱码。所以,建议养成良好习惯,采用“正规汉化”。

        以上的汉化是修改string.xml,把英文译成相应的中文就 好了,然后打包和签名。但是,在有些apk文件里,所显示的字符文字并不都在xml文件里。apk原作者把某些字符写 在代码中。反编译后,存放在/smali文件夹里。一层一层地找下去,最后你会看到 一大堆Dalvik码文件,都是以.smali为 文件扩展名。举一个例子,用文本编辑器 打开某个.smali文件,看到: const-string v5, “ServiceMode” “ServiceMode”会在apk执行时显示为英 文。因此,需要汉化。在ROM里, 用工程模式特殊代码看到的多半属于这一 类。汉译起来非常花时间。我们要 把ServiceMode译成“服务模式”。怎么处 理呢?你不能把const-string v5, “ServiceMode”直接改成const-string v5, “服务模式”。打包会失败的。正确的 做法是把相应的中文字符用16进制的unicode来表示。例如:把“服务模 式”用16进制的unicode表示就 是\u670d\u52a1\u6a21\u5f0f 。每一个 汉字用4个字符表示,\u表示为16进制 的unicode码。好了,正确的汉译是: const-string v5, “\u670d\u52a1\u6a21\u5f0f ”
        网上有中文字符与16进制unicode码的对照表或转换工具。

     Apk打包和签名打包操作很简单。 重新回编成apk,软件不同会有细微差别,回编后签名就行,有些程序是不能用签名的,所生成的新的apk应用程序、这就是汉化好的apk程序了。 现在你需要把文件改成你需要的名字。

完成。
回复个咯。支持我咯

源文链接:
http://bbs.anzhi.com/forum.php?mod=viewthread&tid=6299419&fromuid=4000750

你可能感兴趣的:(apk(安卓手机应用软件)解包汉化过程简单陈述 [转贴])