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

面试:Android应用打包编译流程,第1张

面试: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编译打包过程主要分为如下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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5677454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存