为什么要使用它,和简单的unzip有什么区别
再说APK
APK文件简介 APK是AndroidPackage的缩写,即即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk。APK文件是用专业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件直接传到Android手机中执行即可安装。APK文件其实就是zip格式,但其扩展名被改为apk,用解压软件可以直接打开。通过WinRAR或UnZip解压后,你会看到有几个文件和文件夹。
一个典型的APK文件通常有下列内容组成:
* AndroidManifest.xml 程序全局配置文件
* classes.dex Dalvik字节码
* resources.arsc 编译后的二进制资源文件
* META-INF\ 该目录下存放的是签名信息
* res 该目录存放资源文件
* assets 该目录可以存放一些配置文件 下面对这些文件和目录做些基本的注释和介绍。
• AndroidManifest.xml 该文件是每个应用程序都必须定义和包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。需要解包后才能加以阅读。
• classes.dex文件 classes.dex是java源码编译后生成的java字节码文件。
dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
• resources.arsc 编译后的二进制资源文件。
• META-INF目录 META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
• res目录 res目录存放资源文件。包括图片,字符串等等。 解包后,几乎所有可能的修改和编辑工作基本都在这里。
• assets目录 assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
apk和zip压缩包无异,但当我们使用unzip去解压apk后,也会得到其中的包内容,但当执行cat AndroidManifest.xml,所看到的是乱码
???????????????:L???????:
??????$"????????F8#????????GH????????????G8%????????IJ????????????I8&????????IK????????????I`(????????L?Pa????????????L????????????F????????????:L.???????????????????????:L2???????????$5????????F86????????????????????G87????????????????????G88????????????????????G????????????F????????????~`<????????:???3
???????????????:????????????8???????????????%
而如果使用apktools解压出来则是可读的,更重要的一点,修改其中的string(汉化),更改资源图片(换肤)然后再进行签名(Auto-sign)就可以生成一个新的apk,但unzip出来的就不具备这一功能了。
如何安装
http://ibotpeaches.github.io/Apktool/install/
简单说下载apktool.jar 以及 一个脚本apktool(自个建一个)然后都放到/usr/loacal/bin 或者 /usr/bin/中
常用命令
参考
apktool d XX.apk 反编译
apktool b XX 编译