APK打包流程

(图是从别地儿抠过来的,所以不清晰 =。=)

APK打包流程_第1张图片

AAPT:

首先,安卓APP的资源这一块,会通过aapt进行一个编译,这个工具编译的时候,会首先会把我们的这个xml文件生成这一个R.java,然后再就是像manifest清单文件,它会通过编译把生成一个二进制文件,资源文件,他会去生成一个resource.arsc文件等等。

AIDL:

右边这一块的话,有一个AIDL。AIDL主要针对程序中跨进程的文件处理,帮你把用aidl这样的接口描述语言写的文件转换成或者说生成这一个Java文件。

APT:

这个里面其实还有像比方说apt,它实际上也是通过APT工具按照我们的一个规则,通过注解去生成Java文件,这个过程也是在这一块做的。

Java Compiler:

做完上述可以看到就相当于有三种这样的Java文件,资源生成R.java,aidl这样的工具生成的Java,再就是我们自己写的Java文件,这些都会通过Javac直接编译成.class文件.

dex:

Dex工具会把class文件,还有我们的第三方的这样的依赖库和.class文件,进行编译生成.dex文件,.dex主要是用来在我们的虚拟机运行,当然这个过程也会去消除一些冗余信息、压缩常量值等等做这样的一些简单的处理,相当于简单的优化一下。

 apkbuilder:

生成的.dex就通过apkbuilder编译工具,把由AAPT生成的编译的资源文件,.dex文件,还有其他的一些资源,把它合并生成我们的.apk包。

jarsigner

生成我们的.apk包后就通过运行模式(debug/release)进行签名,生成签名之后生成的signed.apk

zipalign(release模式)

生成签名apk后一般还会做一个字节对齐,那么一般是四字节对齐,主要是为了减少运行时的内存,包括像mmap,对齐了字节后,可以直接访问资源文件,让资源的访问速度更快。

整个APK编译流程大致就是这样。

你可能感兴趣的:(Android原理及性能优化,android)