⾯试:Android应⽤打包编译流程
⼀、APK⽂件结构
解压apk⽂件后包含l、asts⽬录、class.dex(还可能有 class2.dex,lassN.dex)、lib ⽬录、META-INF⽬录、res⽬录和resources.arsc;
class.dex 是.dex⽂件;
sisp
resources.arsc是resources resources⽂件;
考研作文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⽂件。
annihilate3、 Javac编译
使⽤JDK⾥的javac编译R.java、aidl⽣成的Java⽂件、Java源⽂件, 并⽣成.class⽂件。
4、 ⽣成dex⽂件
转换所有的class⽂件,⽣成class.dex⽂件。处理⽂件就是上⼀步⽣成的 .class ⽂件;
英文论文翻译使⽤dx⼯具将java字节码转换为dalvik字节码、压缩常量池、消除冗余信息等;
通过dex命令,将.class⽂件和第三⽅库中的.class⽂件处理⽣成class.dex;
5、 ⽣成apk⽂件
使⽤ApkBuilder将resources.arsc、res⽬录、l、asts⽬录、dex⽂件打包成apk, 具体逻辑是在
com.android.sdklib.build.ApkBuilder中实现的。
6、签名apk⽂件
使⽤apksigner为安装包添加签名信息。
7、 zipalign优化签名包bbcmediaaction
使⽤zipalign⼯具对签名包进⾏内存对齐操作, 即优化安装包的结构。
综上所述, Android SDK中build-tools⽬录提供了各种程序, 都是独⽴可运⾏的,可以认为Android Studio编译打包过程是对这些⼯具的封装。localtime
打包中需要的⼯具
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