参考网址: 浅谈Android编译打包流程
一、基本概念
1、apk本质是一个压缩包,把后缀名改成zip,就可以看到apk文件的所有内容。
2、为什么不直接使用zip,答案:系统规定的不允许
3、apk如何加载: 通过应用管理器这个程序,扫描所有的apk文件,把它们标记为可加载的程序,当安装apk时,把它进行解压处理
4、apk解压后包含的文件:
| 文件名 | 备注 |
|---|---|
| lib | 所有的so动态链接库,不会被压缩处理 |
| assets | 资源文件,不会被压缩处理 |
| res | 资源文件,二进制的xml文件和图片资源文件 |
| Android manifest.xml | 二进制xml文件 |
| class.dex | java代码通过处理得到的 |
| META-INF | 签名文件夹 |
| resources.arsc | 资源索引表 |
二、打包流程
| 流程名 | 备注 |
|---|---|
| AAPT | 编译/打包资源文件,生成R.java和resources.arsc和res资源文件 |
| aidl | 把aidl生成java文件 |
| java compile | 把java文件编译成.class文件 |
| dex | 把.class文件转换成dex文件 |
| apk building | 打包生成.apk文件 |
| jar signer | 对apk进行签名 |
| zipalign | 对apk做对齐处理 |
备注:
| R.java定义了各个资源ID变量 |
|---|
| resources.arsc是资源索引表 |
| 我们常用的findviewByid就是先在R.java中获取变量ID,然后在resources.arsc中查到对应的资源文件位置 |
| assets和res/raw的资源会被原封不动的打包到apk中,不会被编译成二进制,其他资源文件会经过特殊处理,进行压缩,过滤等 |
| assets和raw的区别: raw会在R.java中生成资源id,assets不会被映射到R.java,访问它需要使用assetManager |
| res/values会被编译到resources.arsc中 |
| 通过dx工具把java 字节码转换为 dalvik字节码,压缩常量池,消除冗余信息等 |
Android编译打包流程解析
本文主要介绍Android编译打包相关内容。阐述了apk本质是压缩包,系统规定不能直接用zip,还说明了apk加载方式是通过应用管理器扫描标记,安装时解压处理,同时提及了apk解压后包含的文件,此外还涉及打包流程。
541

被折叠的 条评论
为什么被折叠?



