APK打包流程
在上文我们介绍了如何使用Android Studio构建Apk,接下来我们探究一下apk的构建流程。
为什么需要学习APK打包的流程?
在插件化、热修复、多渠道打包技术中都需要我们理解APK打包的流程
APK文件构造
将Apk解压后可以看到下面这些文件:
assets:
可以包含任何需要的文件,开发者可以在运行是通过AssetManager API访问这些文件
lib:
包含了应用的原生库(native libraries),这些库通常是用C或C++编写的。
META-INF:
包含了关于应用签名的信息。
res:
包含了应用的资源文件,如图片、XML布局、字符串定义等。
AndroidManifest:
应用的清单文件,包含应用的名称、版本、权限、注册的Activity、服务等信息
classes.dex文件:
包含应用的字节码,这些字节码能被Dalvik虚拟机或者ART运行,可能不只一个dex文件
resources.arsc:
包含了应用的预编译资源、如字符串、颜色、样式等。
APK打包工具
在Android的SDK目录下可以找到build-tools
文件,
其中有一系列的打包工具
APK打包流程
apk打包流程主要有以下几个步骤:
- 资源编译:所有的资源文件(如XML、图片、音频等)都会编译成二进制格式。通过
aapt
打包资源文件、生成R.java
、resources.arsc
和res
文件(二进制非二进制文件如res/raw保持原样) - 处理.aidl文件, aidl工具将.aidl文件生成对应的Java接口(aidl用于进程间通信)
- 代码编译:通过Java Compiler编译
R.java
、java接口文件、Java源文件,生成.class文件,通过dx/d8工具将.class文件处理生成classes.dex
- APK打包:编译后的资源文件、Dex文件、清单文件(AndroidManifest.xml)以及其他必要的文件(如证书文件)通过
apkBuidler
被打包成一个未签名的APK文件。 - APK对齐:未签名的APK文件被对齐优化(它确保所有未压缩的数据在APK文件中的偏移量都对齐到相应的字节边界),这可以使得APK文件在设备上运行时消耗更少的内容。
- APK签名:对齐后的APK被签名。签名可以保证APK文件的完整性和来源的可信度。
- 验证:最后,可以使用
apksigner
工具来验证APK文件的签名是否正确。
关注我,分享更多安卓开发知识👍