Android APK编译流程
apk 是Android Package的简写, 在平时的开发过程中,通过点击 Run app 按钮 或者 在命令行中输入
这样Android Studio就会启动构建流程,最终输出一个我们想要的APK。
直达官网介绍
对于小白来说,上面一张图已经可以解释apk的构建过程了,不过对于Andoid开发者而言还需要了解一些更详细的构建过程。
详细的对应步骤 和 使用工具如下:
资源文件(res文件夹下的文件)通过 AAPT(Android Asset Packaging Tool)打包生成R.java类(资源索引表)、.arsc资源文件 和res文件。
resources.arsc 是一个App的资源索引表,通过R.java 文件 和 resources.arsc 可以定位到资源的内存地址,resources.arsc文件的作用是通过一样的ID,根据不同的配置索引到最佳的资源显示在UI中。
AIDL (Android Interface Definition Language), 是Android接口定义语言,是Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。
如果有aidl文件,这个阶段会生成对应的Java接口文件。
R.java文件、工程源码文件、aidl.java文件, 在这一步通过javac生成.class文件。
源码.class文件和第三方jar或者library通过dx工具打包成dex文件
Android系统的Dalvik虚拟机的可执行文件为DEX格式,所以这里会将上一步中生成的.class文件 和 引用的第三方jar等过程中的.class 一起通过dx工具打包成dex文件
apkbuilder工具会将所有没有编译的资源、.arsc资源、.dex文件打包到一个完成apk文件中
tips:
apksigner工具会对未签名的apk验证签名。得到一个签名后的apk(signed.apk)
apksigner 是google 退出的V2签名方式
Jarsigner 是之前一直使用的V1签名方式
可以通过在命令行中输入apksigner --help来获取详情信息,如果没有特殊需求,使用下面命令即可完成签名
release mode 下使用 aipalign进行align,即对签名后的apk进行对齐处理
所谓对齐,主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。
zipalign是一个android平台上整理APK文件的工具,它对apk中未压缩的数据进行4字节对齐,对齐后就可以使用mmap函数读取文件,可以像读取内存一样对普通文件进行操作。如果没有4字节对齐,就必须显式的读取,这样比较缓慢并且会耗费额外的内存。
参考文章:
Android-Studio配置构建
浅谈Android打包流程
apk打包流程
END!