urlname
type
Post
password
SyncToConfluence
category
Android
date
Apr 17, 2024
slug
01HWFD4CSJ5N7XRD3E20C5Y1J3
icon
Button
catalog
summary
tags
Android
开发
cover
Status
BusyTime
Status 1
status
Published
记录关于Android 应用APK打包的流程、过程及相关的内容。
📝 写在前面
相关关键词
- JVM
- ART
- Dalvik
- Dex
- AAR
- JAR
- Class
- Resource
主要流程
Resource 编译 → Source Code 编译 → 混淆优化 → Dex 打包 → 生成apk并签名

- 图片引用自:https://medium.com/androiddevnotes/the-internals-of-android-apk-build-process-article-5b68c385fb20
打包流程
Resource资源编译
- 作用:
- 将所有的XML资源文件(AndroidManifest.xml、string.xml等)、AIDL文件转换成R.java文件(在Android中使用的R对象)
- 产物:
- R.java
Source Code编译
- 作用:
- 使用Javac编译Java文件
- 使用Kotlinc编译Kotlin文件
- 产物:
- .class字节码文件
混淆优化
- 作用:
- 根据规则使用R8或ProGuard将代码进行混淆,提升代码安全性
- 对代码进行优化,删除不必要代码
- 产物:
- 混淆后的代码文件
- 记录了原始类名、方法名和字段名与混淆后的名字之间对应关系的映射文件
Dex打包
- 作用:
- 将各种class、jar、aar打包成能在Android虚拟机上运行的Dex字节码文件
- 产物:
- Android5.0之前:单个classes.dex文件
- Android5.0及之后:可以设置multidex,生成多个.dex文件
- 注意:
- 单个dex文件,方法数不能超过65536(方法引用索引是用16位整数来存储的,因此最多只能表示2^16个不同的方法)
生成APK并签名
- 作用:
- 将多个dex文件以及资源文件,打包成可以在Android上安装的APK文件
- 对于release版本,还需要提供Keystore文件进行签名
- 对于debug版本,会自动debug证书进行签名
- 产物:
- 最终可以被Android系统识别并安装的APK文件
🤗 总结归纳
- APK的打包流程总体上比较直观,核心思路是先将各种文件转换到JVM可以识别的格式,然后再将JVM字节码进行优化、混淆等,再转换为Android特有的Dex文件,并进行打包。
- APK的打包任务的执行,是由Gradle把控的,在了解了APK打包的大概流程之后,可以结合Gradle不同task执行的顺序,互相印证学习。
📎 参考文章
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/01HWFD4CSJ5N7XRD3E20C5Y1J3
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts



