Android程序生成步骤
步骤流程图
整个APK的打包过程分为以下7个步骤:
第一步:
工作
打包资源文件,生成R.java文件
工具
aapt
位置:
工具位置:
android-sdk\platform-tools
源码位置:
frameworks\base\tools\aapt
步骤:
- 调用aapt源码目录下的Resource.cpp文件中的buildResources()函数
- 函数buildResources()函数首先检查AndroidManifest.xml的合法性
- 调用makeFileResources()对res目录下的资源文件子目录进行处理()
- 调用compileResourceFile()函数编译res和asserts目录下的资源并生成resources.arsc文件
- 最后调用parseAndAddEntry()函数生成R.java文件。
第二步
工作
处理aidl(android interface definition language,android接口描述语言)文件,生成相应的java文件
工具
aidl
位置
工具位置:
android-sdk\platform-tools
源码位置:
frameworks\base\tools\aidl
步骤
对于没有使用aidl的android工程可以跳过这一步骤
aidl工具解析接口定义文件,并且生成相应的java代码文件供程序调用。
第三步
工作
编译工程源代码,生成相应的class文件
工具
javac
位置
这是jdk中的自带工具
步骤和效果
调用javac编译工程src目录下的所有的java源文件,生成的class文件都位于bin\classes目录下。
第四步
工作
转换所有的class文件,生成classes.dex文件
工具
dx
位置
工具位置
android-sdk\platform-tools
步骤和效果
dx工具将Java字节码转换为Dalvik字节码,压缩常量池,消除冗余信息。
第五步
工作
打包生成APK文件
工具
apkbuilder
位置
android-sdk\tools
注:
apkbuilder文件是一个脚本文件,实际调用的是,android-sdk\tools\lib\sdklib.jar文件中的com.android.sdklib.build.ApkBuilderMain类
它的实现代码位于android系统源码的
sdk\sdkmanager\libs\sdklib\src\com\android\sdklib\build\ApkBuilderMain.java文件中。
步骤
- 以resources.arsc文件为基础打包成apk文件,这个文件一般以ap_结尾
- 调用addSourceFolder()函数添加工程资源文件,此函数会调用processFileForResource()函数往apk文件添加资源,处理内容包括res目录和assets目录中的文件
- 调用addResourcesFromJar()函数往apk文件中写入依赖库
- 调用addNativeLibraries()函数添加工程libs目录下的Native库
- 调用sealApk()关闭apk文件
第六步
工作
对APK文件进行签名
注:android app需要签名才能在android设备上安装,
签名的两种情况:
1. 在调试程序的时候进行签名,
2. 在打包发布时对程序进行签名
工具
- JDK提供的jarsigner
- android源码中提供的signapk
第七步
工作
对签名后的APK文件进行对齐处理
工具
zipalign
位置
工具位置:
android-sdk\tools
源码位置:
build\tools\zipalign
步骤和效果
对apk包进行对齐处理,使得apk包中的所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时速度回更快,验证APK文件是否对齐过的工作由ZipAlign.cpp文件的verify()函数完成,处理对齐的工作由process()函数完成。