简介
一些初学Android的开发者可能只知道写完项目,然后点击AndroidStudio中的run按钮就可以把项目运行到手机或者模拟器上,而一个apk是怎么从编译打包到最后签名安装到手机上的原理不知道,这里就带领大家理解一下内部的原理
简单build流程
首先,我们看下官网介绍Building and Running Overview,官网给了我们一张非常简单的编译、打包、apk生成内容以及签名的图片,因为官网必须得用vpn才能访问,这里我就直接下载下来了,简单build图片如下:
图片大体介绍了从Project到运行到设备或者模拟器的一个大体流程,我们也从中看到一个完整的apk包含如下内容:一个或多个dex文件、resources.arsc、未编译的资源文件以及AndroidManifest.xml文件等等
详细打包流程
官网给了我们一张非常清晰的打包流程图:
打包步骤
总体打包步骤我们可以概括以下七步:
- 通过aapt打包资源文件,生成R.java和resources.arsc
- 处理aidl文件,生成对应的java接口文件
- 编译项目工程源代码,生成.class文件
- Dex命令处理,将第三步生成的.class文件和第三方的库一起生成classes.dex文件
- 通过apkbuilder工具将aapt生成的resources.arsc、classes.dex(可能多个)、其他的资源一块打包生成apk文件
- 通过Jarsigner对第五步生成的apk进行debug或者release签名,只有签名完的apk才能进行安装
- 通过aipalign对签名后的apk进行对其处理,使apk中所有资源文件距离文件起始偏移为4字节的整数倍,从而在通过内存映射访问apk文件时会更快
其实还应该有最后一步,那就是通过adb install命令将生成的apk安装到设备或者模拟器上