Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:App的源代码,有资源文件生成的R文件(aapt工具),AIDL文件生成的Java接口文件,产出为.class文件
- 用AAPT编译R.java文件
- 编译AIDL的java文件
- 把java文件编译成class文件
- class文件和依赖的三方库文件通过dex工具生成Delvik虚拟机可执行的.dex文件,包含了所有的class信息,包括项目自身的class和依赖的class,产出为.dex文件
- apkbuilder工具将.dex文件和编译后的资源文件生成未经签名对其的apk文件。这里编译后的资源文件包括两部分,一是有aapt编译后产生的资源文件,二是依赖的三方库里的资源文件。产出为未经签名的.apk文件
- 分别由JarSigner和zipalign对apk文件进行签名和对齐,生成最终的apk文件
【通俗的讲】
- 我们平时编译时有时候会一直爆红,编译不过去,需要我们将build文件夹删除然后重新打包,就是重新去构建R.java文件,里面生成的有我们控件id之类的唯一信息
- 把aidl产生的java文件编译进行
- 把java看成描述文档,去生成.class文件让计算机去认识
- 把所有的class文件去生成执行效率更高,体积更小的dex文件
- 把dex和资源文件一块打包成我们常见到的apk文件
- 在apk文件上写上我们的签名
- 对齐,把apk中的未压缩的资源进行‘对齐操作’,让资源按照4字节的边界进行对齐,这样访问速度更快
对齐肯定是在签名后面,不然先对齐了,再去签名不就把之前对齐的破坏了嘛