参考网址: 浅谈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字节码,压缩常量池,消除冗余信息等 |
|