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