Android APK打包流程详解
来源:互联网 发布:淘宝 clarks小公主 编辑:程序博客网 时间:2024/05/17 22:21
在日常开发过程中,由于IDE提供了良好的可视化操作和便捷的打包签名流程,所以很多人对APK是如何打包的并不十分了解。作为一个有追求的程序猿,我们并不满足只会点点按钮,按部就班。理解apk的打包流程有助于我们加深Android 应用从开发到部署的整个生命周期过程的掌握,也会对Android开发有自己更清晰透彻的认识,本篇着重于介绍这一流程。
Android APK内容介绍
以apk为后缀的文件是Android 应用程序的标准格式。它其实是一个zip压缩包。所以可用解压工具winRaR等解压出来。可以看到,一个典型的apk应用程序通常包含以下几部分内容:
├─AndroidManifest.xml ├─classes.dex ├─resources.arsc ├─res │ ├─anim │ ├─color │ ├─drawable │ ├─layout │ └─menu ├─META-INF │ ├─MANIFEST.MF │ ├─CERT.RSA │ └─CERT.SF
下面对几个重要的组成部分,加以说明。
AndroidManifest.xml
记录了应用程序的名称,权限声明,所包含的组件等一系列信息。直接从apk解压出来的AndroidMainifest文件无法打开,因为发布时做了加密保护处理。
classes.dex
它是apk应用的核心,由项目源码生成的.class文件。进一步转化成Android系统可以识别的Dalvik 二级制代码。
resources.arsc
编译过后的资源文件。
res
未编译的资源文件。
META-INF
用于保存应用程序的签名和校验信息,以保证程序的完整性。生成apk包时,系统会对包中的所有内容做一次校验,然后将结果保存在这里。设备在安装这一应用程序时,还会对内容在做一次校验,并和META-INF的值进行比对,以避免程序包被恶意篡改,这就是为什么只简单通过替换文件二次打包,程序不能正常安装的原因。
APK打包流程
下图描述了APK的整个编译过程
首先.aidl(Android Interface Description Language)通过AIDL工具转换成编译器能处理的Java接口文件,如果项目没有用到AIDL则略过这一步骤,工具路径为:
${ANDROID_SDK_HOME}/build-tools/aidl.exe
。资源文件被aapt(Android Asset Packaging Tool)处理为最终的resources.arsc,并生成R.java文件以保证源码编写时可以方便的访问这些资源,aapt工具的路径为
${ANDROID_SDK_HOME}/build-tools/appt.exe
。java将生成R.java文件和源代码文件以及上述生成的接口文件统一编译成.class文件。
因为class文件并不是Android系统所能识别的格式,所以还要利用dex工具将它们转化成Dalvlik字节码。这个过程还会加入程序所依赖的所有第三方库,
${ANDROID_SDK_HOME}/build-tools/dx.bat
。接下来,系统将会上面生成的dex,资源包,以及其它资源,通过apkbuilder生成初始的apk文件包。注意:此时,apk还没有经过签名和优化。
通过签名工具签名,例如Jarsinger等工具。如果在Debug模式下,签名所使用的keystore是系统自带的默认值,否则开发者需要提供自己的私钥来完成签名过程。
将签名后的apk通过zipalign进行优化。优化的目的是提高程序的运行和加载速度。基本原理是对apk包中的数据进行边界对齐,从而加快读取和处理过程,zipaligin工具路径为
${ANDROID_SDK_HOME}/tools/zipalign.exe
。
- Android APK打包流程详解
- 关于android apk打包流程的详解
- android apk打包流程
- Android Apk打包流程
- android打包apk流程
- Android APK打包流程
- Android APK打包流程
- Android APK打包流程
- unity3d-配置Android环境,打包发布Apk流程详解
- unity3d配置Android环境,打包发布Apk流程详解
- unity3d-配置Android环境,打包发布Apk流程详解
- unity3d配置Android环境,打包发布Apk流程详解
- Android Studio apk 打包流程
- Android笔记 - APK打包流程
- Android Studio apk 打包流程
- Android Studio apk 打包流程
- Android Studio apk 打包流程
- Android之apk打包流程
- Java中List、Set、Map区别--小记
- Linux中read接收用户输入
- 把在程序中的System.out.print()的信息自动转成log4j日志信息
- JavaScript 读取XML文件进行广告播放
- 《图像处理》Part1 YUV4:2:2toYUV4:2:0、YUV420toYUV422、YUV422toRGB24、YUV420toRGB24算法
- Android APK打包流程详解
- OPENWRT入门之四------openwrt命令行模式命令及其工具
- Android:控件WebView显示网页
- JavaScript 读取XML 数据
- studio启动ADB
- C#中一个异步回调的实例
- JasSipt之XML DOM对象
- 2016/09/26 8:23
- spring实例和调用过程