Android 打包流程详解
第一步:资源文件打包,生成 R.java 文件
资源打包过程依赖于 aapt(Android Asset Packaging Tool)工具,该工具位于 android-sdk/platform-tools 目录中。在此过程中,Android 项目中的 AndroidManifest.xml 文件以及布局文件 XML 会被编译,进而生成相应的 R.java 文件。
第三步:Java 代码编译,生成 class 文件
项目中的所有 Java 代码,包括 R.java 和 .aidl 文件,都会通过 Java 编译器(javac)编译成 .class 文件。这些生成的 class 文件会存放在工程中的 bin/classes 目录下。
第四步:class 文件转换,生成 classes.dex 文件
dx 工具用于将所有的 class 文件转换成 Android 系统 Dalvik 虚拟机可执行的 classes.dex 文件。该工具同样位于 android-sdk/platform-tools 目录中。
无论是第三方库还是 .class 文件,都会被转换成 .dex 文件。
dx 工具的主要作用在于将 Java 字节码转换成 Dalvik 字节码、压缩常量池以及消除冗余信息等。
第五步:生成 APK 文件
未编译的资源(如 images 等)、已编译的资源以及 .dex 文件都会被 apkbuilder 工具打包成最终的 APK 文件。
apkbuilder 工具位于 android-sdk/tools 目录下。它实际上调用的是 android-sdk/tools/lib/sdklib.jar 文件中的 com.android.sdklib.build.ApkbuilderMain 类。
第六步:APK 文件签名
APK 文件生成后,必须进行签名才能安装在设备上。
在开发过程中,主要使用两种 keystore 进行签名。一种是用于调试的 debug.keystore,主要用于调试过程;另一种是用于发布正式版本的 keystore。
第七步:对签名后的 APK 文件进行对齐处理
若发布的 APK 是正式版,则必须进行对齐处理。使用的工具是 zipalign,同样位于 android-sdk/tools 目录下。
对齐过程会将 APK 包中所有资源文件的起始偏移设置为 4 字节的整数倍,这样可以提高通过内存映射访问 APK 文件时的速度。
对齐的作用在于减少运行时内存的使用,提升应用性能。