Apk(第一部分)| 青训营笔记

181 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

本文延续上次所发布的文章继续进行Android 系统的介绍,建议在阅读上一篇后再阅读本文。

1.APK介绍

APK全称为AndroidPackage,即Android安装包(本质也是一个压缩包)。所以apk一般包含一个项目所有源码和资源,其安全性就变得至关重要。但是这个安装包存在“BUG”,因为对于懂一点反编译原理的人来说,apk的源码是透明的,而且不仅可以看到,对其进行修改和打包重新编译都轻而易举。那么对apk的加固就变得至关重要,我们会在后文讲到。

2.APK的构成

  • META-INF目录:包含两个签名文件(CERT.SF和CERT.RSA),以及一个manifest文件(MANIFEST.MF),用于校验和安全,只有我们有apk的签名时,安装包里才有这个文件,如果没有签名的apk,Android设备是不允许安装的

  • assets目录:记录一些资源文件,如文档,图片;可以使用AssetManager获取

  • res目录:包含那些没有被编译到resources.arsc的资源

  • lib目录:主要是存放C/C++代码编译成的so文件

  • resources.arsc文件:可执行文件,存储经aapt编译过的资源,包括项目工程中的res/values目录里的xml文件,它们都被编译成二进制格式,也包括一些路径,指向那些没有被编译的资源,比如layout文件和图片

  • classes.dex文件:项目中的java类都被编译到该dex文件,这个文件可以被Android的Dalvik/ART虚拟机解析。

  • AndroidManifest.xml:生命app中四大组件,以及权限,是一种二进制格式的manifest文件

3.APK的打包流程

a. 打包资源文件,生成R.java文件

b. 处理aidl文件,生成相应的Java文件

c. 编译项目源代码,生成class文件

d. 转换所有的class文件,生成classes.dex文件

e. 打包生成APK文件

f. 对APK文件进行签名

g. 对签名后的APK文件进行对齐处理