Android APK打包过程
1.什么是APK
- APK是 Android application package即安卓应用程序包的缩写,是能安卓运行在安卓操作系统的一种应用程序包文件格式。
- 在Android应用开发完成后,会将java/kotolin源代码,资源文件等经过一系列编译及压缩最终生成一个可安装在安卓操作系统的apk文件
- 编译打包生成的apk文件生成在在AndroidStudio module 下的build/outputs/apk/debug (release)中,如下图
2APK里面到底是什么
先安利一下APK分析器:
Android Studio 里面包含一个 APK 分析器,可让您在构建流程完成后立即了解 APK 的组成。您可以通过以下三种方式访问 APK 分析器:
-
将 APK 拖动到 Android Studio 的 Editor 窗口中。
-
在 Project 窗口中切换到 Project 透视图,然后在默认的 build/output/apks/ 目录中双击相应 APK。
-
在菜单栏中依次选择 Build > Analyze APK,然后选择您的 APK。
打开apk之后看到的结构如下图
可以看到里面有classes.dex,res,resources.arsc,META_INF,AndroidManifest.xml等文件 -
classes.dex就是Android系统Dalvik虚拟机的可执行文件,是由dx工具将.class文件转换而来
-
res就是一些资源文件
-
resources.arsc:程序的语言文件,可以透过这软件用(AndroidResEdit等工具)来进行翻译,也可以用ApkTool等工具反编译后再开始进行软件修改
这些文件是怎样生成的呢?
3.AKP打包流程
Android Studio 会使用高级构建工具包 Gradle 来自动执行和管理构建流程。Gradle 和 Android 插件独立于 Android Studio 运行。
gradle构建流程如下图
还有一个经典的详细流程图如下图
- 1、通过aapt(The Android Asset Packaing Tool),将AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java。
- 2、如果项目存在AIDL文件,sdk中(android-sdk/platform-tools目录下)IDL工具会处理AIDL文件,生成相应的Java接口文件
- 3、R文件、java接口文件及源代码会通过编译器(javac)生成.classes文件,存放到bin/classes目录下
- 4、dx工具将三方的library和.classes文件转换成可供Dalvik虚拟机执行的classes.dex文件
- 5、打包工具apkbuilder将.dex文件、编译过的和未编译过的资源合并一起生成.apk文件
- 6、生成apk后进行签名
- 7、签名后对齐处理,在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,以减少其在设备上运行时所占用的内存