Android程序生成步骤

步骤流程图

Android程序生成步骤
整个APK的打包过程分为以下7个步骤:

第一步:

工作

打包资源文件,生成R.java文件

工具

aapt

位置:

工具位置:
android-sdk\platform-tools
源码位置:
frameworks\base\tools\aapt

步骤:

  1. 调用aapt源码目录下的Resource.cpp文件中的buildResources()函数
  2. 函数buildResources()函数首先检查AndroidManifest.xml的合法性
  3. 调用makeFileResources()对res目录下的资源文件子目录进行处理()
  4. 调用compileResourceFile()函数编译res和asserts目录下的资源并生成resources.arsc文件
  5. 最后调用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文件中。

步骤

  1. 以resources.arsc文件为基础打包成apk文件,这个文件一般以ap_结尾
  2. 调用addSourceFolder()函数添加工程资源文件,此函数会调用processFileForResource()函数往apk文件添加资源,处理内容包括res目录和assets目录中的文件
  3. 调用addResourcesFromJar()函数往apk文件中写入依赖库
  4. 调用addNativeLibraries()函数添加工程libs目录下的Native库
  5. 调用sealApk()关闭apk文件

第六步

工作

对APK文件进行签名
注:android app需要签名才能在android设备上安装,
签名的两种情况:
1. 在调试程序的时候进行签名,
2. 在打包发布时对程序进行签名

工具

  1. JDK提供的jarsigner
  2. android源码中提供的signapk

第七步

工作

对签名后的APK文件进行对齐处理

工具

zipalign

位置

工具位置:
android-sdk\tools
源码位置:
build\tools\zipalign

步骤和效果

对apk包进行对齐处理,使得apk包中的所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时速度回更快,验证APK文件是否对齐过的工作由ZipAlign.cpp文件的verify()函数完成,处理对齐的工作由process()函数完成。