PS:以下为学习总结,not原创。
打包过程的细节,请看老罗博客:
Android应用程序资源的编译和打包过程分析
apk签名的意义
通过对发布的apk进行唯一签名,来防止其他开发者通过相同的package name来混淆替换已经安装的程序。使用相同签名的软件升级可以正常覆盖老版本软件,当系统发现新版本签名和老版本签名不一致时,不会允许新版本安装成功。
apk打包流程
1.打包资源文件(Android Resources),通过aapt生成R.java文件
2.处理aidl文件,通过aidl tool生成.java文件
3.编译工程源代码(Source Code),通过Java Compiler生成.class文件
4.转换所有的class文件,包括第三方库(.class),通过dex生成classes.dex文件;
5.使用apkbuilder打包生成未签名的apk
6.对apk文件进行签名
7.对签名后的apk使用zipalign进行对齐处理
流程图如下:
打包过程中使用的工具介绍
aapt
全称:Android Asset Package Tool
功能:Android资源打包工具
路径:${ANDROID_SDK_HOME} /build-tools/ANDROID_VERSION/aaptaidl
全称:Android Interface Definition Language
功能:Android接口描述语言,将aidl转化为.java文件的工具
路径:${ANDROID_SDK_HOME}/build-tools/ANDROID_VERSION/aidljavac
全称:Java Compiler
功能:Java编译器,将java文件转换为字节码
路径:${JDK_HOME}/javac或/usr/bin/javacdex
功能:将.class文件转换为Davik VM能识别的.dex文件
路径:${ANDROID_SDK_HOME}/build-tools/ANDROID_VERSION/dxapkbuilder
功能:生成apk包
路径:${ANDROID_SDK_HOME}/tools/apkbuilderjarsigner
功能:.jar文件的签名工具
路径:${JDK_HOME}/jarsigner或/usr/bin/jarsignerzipalign
功能:字节码对齐工具
路径:${ANDROID_SDK_HOME}/tools/zipalign