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并签名
notion image

打包流程

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执行的顺序,互相印证学习。

📎 参考文章

 
Java多线程——线程安全Compose处理副作用的函数
Loading...