您的位置:首页 > 其它

APK编译、签名、zipalign优化及APKTOOL的使用

2013-04-15 15:20 537 查看
APK工具的使用
工欲善其事必先利其器。我们先来介绍一下编译AKP文件的工具APKtool。Apktool是一个反编译和回编译apk文件的工具,有了它我们就可以打造自己的apk文件。
首先我们可以用winrar打开apk文件,看似好像是一个普通的压缩包,但实际上远非这么简单。WINRAR解压文件后,查看图片似乎没有什么问题,但当你查看xml文件的时候就会发现—“乱码”。
apk是经过程序编译后的文件,不能单纯解压后进行修改。当然主要针对classes.dex、resources.arsc ,RES目录下的图片等资源文件一般可不用反编译直接替换。
要想修改APK文件,我们首先要进行反编译。进行反编译工作前,我们先来构筑JAVA运行环境。

一,构筑运行环境
运行APKtool,首先要下载JAVA SDK 1.6,安装后设置环境变量,JDK-6u37
32位下载地址
[GUIDE]
How To Install and Use Android SDK
Windows XP:右键点击“我的电脑”,点击“属性”,选择“高级”选项卡,点击“环境变量”
Windows 7:右键点击“我的电脑”,点击“高级系统设置”,点击最下面的“环境变量”
在系统变量下
新建:
变量名JAVA_HOME
变量值C:\Program Files\Java\jdk1.6 此处路径是按照你的JAVA安装目录为准。
新建:
变量名CLASSPATH
变量值 .;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar 注意前边的点别丢了。
编辑PATH变量
在PATH变量后面添加 ;%JAVA_HOME%\bin 分号是为了与前边已有项隔开
然后点击开始菜单,点击“运行”,输入CMD,出现DOS窗口
输入java和javac,如果显示参数提示,环境设置就OK了。
可参考java环境变量配置

二,反编译和回编译



我们来看apktool,完整的apktool包括3个文件,aapt.exe ;apktool.bat;apktool.jar
可将这3个文件放入c:\windows目录下方便调用。
可在C盘下建立APK文件夹方便操作,把需要修改的apk文件和系统框架framework-res.apk一起放入,如有副框架也需放入(如不清楚可把system/framework下所有apk放入)。
运行中输入cmd打开DOS窗口,输入命令进入新建apk文件夹
cd\
cd apk
C:\apk>

1.安装框架
apktool if framework-res.apk
完成后显示 I: Framework installed to: C:\Documents and Settings\Administrator\apktool\framework\1.apk
apktool已经包含了标准框架,大多数APK解包时不需要安装框架,但某些制造商(如三星、HTC)使用了自己的框架文件,如果要修改手机system/app下系统文件必须加载框架,否则回编译会出错。框架文件framework-res.apk在手机system/framework/下,应加载此文件夹下所有apk文件(一般1到2个)。华为U8825D也有副框架不过一般没用。副框架加载一般会生成名为2.apk的文件。

下面以修改systemui.apk为例

2.反编译命令
Apktool d systemui.apk
会在当前目录下生成systemui目录,反编译后的文件就在这里。目录名称可自定,
如Apktool d systemui.apk 123 123为生成目录

3.回编译命令
Apktool b systemui 456.apk
回编译systemui目录,然后生成456.apk文件,名称自定。
此时已生成456.apk为编译后文件,用winrar打开后发现与原文件比较缺少META-INF目录,此目录包含apk签名文件,没有被签名的程序,系统将不能安装。只有相同签名的程序,才能替换升级。
为了不破坏签名文件,我们用winrar打开原apk和修改后的apk(不要解压出来),将resources.arsc 文件拖回原apk窗口覆盖源文件,压缩模式选择储存。将classes.dex也拖回覆盖,压缩模式选择标准。如果修改了图片等资源文件可将res文件夹拖回覆盖,关闭winrar完成对APK的修改。
补充:一般res目录可删掉然后把处理后的res目录选择储存模式拖回原apk,但其中的.9.png格式比较特殊,会由aapt进行编译,不可随意替换。另外反编译后也不要替换“AndroidManifest.xml”
否则容易出错。

附:为什么要签名?
每个应用都有一个唯一合法的ID,这就签名,签名可以保证软件升级的一致性,使用相同签名的应用可以覆盖安装,不一致的签名将无法共享使用数据,无法覆盖安装,这样可防止篡改,保护开发者利益。但签名只能保证检测到修改,并不能阻止你修改。

三,zipalign优化
使用zipalign优化你的APK文件,可以减少运行内存RAM的占用。
如果你下载过Android SDK Tools,此文件位于android-sdk-windows\tools目录下
命令格式
zipalign.exe -v 4 你的apk文件
参数v:详细输出。 参数4:对齐为4字节。
zipalign能够确保apk文件中未压缩的数据在4个字节边界上对齐,这样android系统就在读取资源上获得较高的性能,从而减少RAM占用,但文件大小一般会有所增加。
如果对APK进行签名,那么在签名后才可进行zipalign优化。

四,版本选择及工具下载
网上有不少集成的工具,可反编、回编、签名、优化,相当方便。但掌握命令行模式将会让我们打好基础,出错也比较好找原因。编译framework-res.apk框架尤其推荐命令行模式。
如使用集成的工具,可自行将aapt.exe和apktool.jar替换为最新版,一般没有问题。提示:系统apk无需自己签名,用winrar替换回去可保留原文件签名,属于只认签名不认人的类型。
反编译也不是一定保证成功,华为自带的框架和系统文件就有点问题,可到找修改好能运行的拿来修改,当然修改过的出问题的几率也大。推荐用BCompare等比较工具比较文件差异,这工具相当方便。
网上有很多apktool的版本,当初找的我头晕眼花,也没人说下原来这货是有官网的,X,最新版是1.5,网上流传多是1.43。
Apktool---XDA论坛发布地址 GOOGLE地址
aapt.exe和 zipalign.exe是Android SDK tools自带,可自行更新官方版,也可于XDA论坛下载作者修改版。(修改版个头几乎是原版10倍)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐