面试:Android应用打包编译流程

一、APK文件结构

  • 解压apk文件后包含AndroidManifest.xml、assets目录、classes.dex(还可能有 classes2.dex,classes3.dex...classesN.dex)、lib目录、META-INF目录、res目录和resources.arsc;
  • classes.dex 是.dex文件;
  • resources.arsc是resources resources文件;
  • AndroidManifest.xml是AndroidManifest.xml文件;
  • res是uncompiled resources;
  • META-INF是签名文件夹;

面试:Android应用打包编译流程

二、打包流程

面试:Android应用打包编译流程

 

Android编译打包过程主要分为如下7个步骤:

1.  aapt过程

使用文件aapt/aapt2打包res目录资源文件, 生成R.java、resources.arsc和res目录。

2、aidl生成Java文件

AIDL是Android Interface Definition Language的简称, 是Android跨进程通讯的一种方式。

检索工程里所有的aidl文件,并转换为对应的Java文件。

3、 Javac编译

使用JDK里的javac编译R.java、aidl生成的Java文件、Java源文件, 并生成.class文件。

4、 生成dex文件

  • 转换所有的class文件,生成classes.dex文件。处理文件就是上一步生成的 .class 文件;
  • 使用dx工具将java字节码转换为dalvik字节码、压缩常量池、消除冗余信息等;
  • 通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex;

5、 生成apk文件

使用ApkBuilder将resources.arsc、res目录、AndroidManifest.xml、assets目录、dex文件打包成apk, 具体逻辑是在com.android.sdklib.build.ApkBuilder中实现的。

6、签名apk文件

使用apksigner为安装包添加签名信息。

7、 zipalign优化签名包

使用zipalign工具对签名包进行内存对齐操作, 即优化安装包的结构。

     综上所述, Android SDK中build-tools目录提供了各种程序, 都是独立可运行的,可以认为Android Studio编译打包过程是对这些工具的封装。
 

打包中需要的工具

  • aapt:Android资源打包工具,${ANDROID_SDK_HOME}/platform-tools/appt
  • aidl:Android接口描述语言转化为.java文件的工具,${ANDROID_SDK_HOME}/platform-tools/aidl
  • javac:Java Compiler,${JDK_HOME}/javac或/usr/bin/javac
  • dex:转化.class文件为Davik VM能识别的.dex文件,${ANDROID_SDK_HOME}/platform-tools/dx
  • apkbuilder:生成apk包,${ANDROID_SDK_HOME}/tools/opkbuilder
  • jarsigner:.jar文件的签名工具,${JDK_HOME}/jarsigner或/usr/bin/jarsigner
  • zipalign:字节码对齐工具,${ANDROID_SDK_HOME}/tools/zipalign
上一篇:Ubuntu安装VMware tools后不起作用


下一篇:代码名称