android-apktool:编译与反编译APK程序

2011年05月21日   教程经验   0条评论   1050人围观过  

  开始稍微深入的研究一点如何修改APK吧。某机油经常要求我的ROM带数字电量,于是找了相关的教程。学习到了那么一点点东西,于是乎记录下来。这些都是不可多得的方法与经验。   本文原文来自“APK 本地化/修改利器 —— 《android-apktool》”,感觉写的不错。首先感谢该文作者,给我们新手学习的资料。


  以下是转载的原文。   说起APK的汉化,目前大部分教程都是让用Hex Workshop或者Android ResEdit来做。但是实际操作后,就会发现:
1、Hex Workshop操作繁琐,经常出现搜不到想要修改的字符的情况; 2、Android ResEdit简单用用可以,修改稍微复杂一点就会出现整条整条丢字符串的情况;并且新内容不能比原内容长——谁能保证我的本地化语言就一定比原来的短呢?
  现在好了,老外写的《android-apktool》软件,可以帮助我们把APK反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。   《android-apktool》软件软件可以访问它的主页android-apktool下载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。下载后解开,为了方便使用,按作者的推荐把得到的4个文件复制到C:\Windows文件夹里。   这个工具是Java写的,需要你的电脑安装了JRE或者JDK,并在系统环境变量Path里加入java.exe所在路径。   以上准备工作做好后,就可以用它来反编译APK了。这里我用动态壁纸的APK来做示范。   如果用过动态壁纸,你也许会发现在设置壁纸时,界面的显示有点问题:“动态壁纸”,在手机上中文显示为“当前壁纸”。这是“动态壁纸选择器”LiveWallpapersPicker.apk的翻译错误造成的。   (假设LiveWallpapersPicker.apk放在C盘根目录)   开始 > 运行,输入cmd,回车: [sourcecode language="java"] apktool d "C:\LiveWallpapersPicker.apk" "C:\LiveWallpapersPicker" [/sourcecode]   (命令行解释:apktool d 要反编译的文件 输出文件夹)   这样,LiveWallpapersPicker.apk就被反编译了,输出内容在C:\LiveWallpapersPicker文件夹里。   打开C:\LiveWallpapersPicker文件夹,我们发现里面有一些XML文件和一些文件夹。绝大部分情况下,语言和图片资源都在res文件夹里,我们这个例子当然不例外。   打开res文件夹,可以其中又是很多文件夹。(又是)绝大部分情况下,语言资源都放在values*文件夹里。比如说values放默认语言(英语居多),values-de放德语,values-fr放法语等等。一般我们关心的是values-zh-rCN(简体中文)和values-zh-rTW(繁体中文)。   打开values-zh-rCN文件夹,其中有个strings.xml。打开看看: [sourcecode language="xml"] <?xml version="1.0" encoding="UTF-8"?> <resources> <string name="application_name">动态壁纸选择器</string> <string name="live_wallpaper_picker_title">当前壁纸</string> <string name="live_wallpaper_preview_title">当前壁纸预览</string> <string name="configure_wallpaper">设置...</string> <string name="wallpaper_instructions">设置壁纸</string> <string name="live_wallpaper_empty">无当前壁纸。</string> <string name="set_live_wallpaper">设置壁纸</string> <string name="wallpaper_title_and_author">%1$s提供者:%2$s</string> <string name="live_wallpaper_loading">正在载入当前壁纸…</string> </resources> [/sourcecode]   很好,就是它了。把“当前壁纸”都改为“动态壁纸”,再检查和修正标点——中文内容用中文标点(强烈呼吁大家注意标点问题,目前马大哈太多了)后,保存。   本例改这么多就够了。其它复杂的APK建议把res文件夹里的内容都检查下,至少你关心的语言文件夹里的内容都检查下。   改完后,就可以重打包了。还是在cmd命令行里,输入: [sourcecode language="java"] apktool b "C:\LiveWallpapersPicker" [/sourcecode]   (命令行解释:apktool b 要打包内容所在文件夹)   这样就打包完成了。生成的APK在C:\LiveWallpapersPicker\dist文件夹里,叫out.apk。   这个out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法随后文章,这里先不提。   签名后得到的APK,就是可以装到手机里的了。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。