Android APK打包流程

栏目: IOS · Android · 发布时间: 6年前

内容简介:打包资源的工具是在这个过程中,项目中的存放在APP的res目录下的资源,该类资源在APP打包前大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id。对于该类资源的访问,应用层代码则是通过resource id进行访问的。

打包资源的 工具aapt(The Android Asset Packaing Tool) ,目录: sdk\build-tools\25.0.0\aapt

在这个过程中,项目中的 AndroidManifest.xml文件和布局文件XML 都会编译,然后生成相应的R.java,另外AndroidManifest.xml会被aapt编译成二进制。

存放在APP的res目录下的资源,该类资源在APP打包前大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id。对于该类资源的访问,应用层代码则是通过resource id进行访问的。

Android应用在编译过程中aapt工具会对资源文件进行编译,并生成一个resource.arsc文件, resource.arsc文件相当于一个文件索引表 ,记录了很多跟资源相关的信息。

2. 处理aidl文件,生成相应的 Java 文件

处理aidl文件的工具是 aidl(Android Interface Definition Language) ,即Android接口描述语言,目录 sdk\build-tools\25.0.0\aidl

aidl工具解析接口定义文件然后 生成相应的Java代码接口 供程序调用。如果在项目没有使用到aidl文件,则可以跳过这一步。

3. 编译项目源代码,生成class文件

编译源代码使用工具是 Java编译器(javac)

项目中所有的 Java代码,包括R.java和.aidl文件 ,都会变Java编译器(javac)编译成 .class文件 ,生成的class文件位于工程中的bin/classes目录下。

4. 转换所有的class文件,生成classes.dex文件

这过程使用工具 dx(dex) 生成可供Android系统Dalvik虚拟机执行的 classes.dex 文件,工具目录 (sdk\build-tools\25.0.0\dx)

任何第三方的libraries和.class文件都会被转换成.dex文件。dx工具的主要工作是将 Java字节码 转成 Dalvik字节码 、压缩常量池、消除冗余信息等。

5. 打包生成APK文件

打包的工具 apkbuilder ,目录 android-sdk/tools ,apkbuilder为一个脚本文件,实际调用的是(sdk\tools\lib)文件中的com.android.sdklib.build.ApkbuilderMain类。

所有没有编译的资源,如images、assets目录下资源(该类文件是一些原始文件,APP打包时并不会对其进行编译,而是直接打包到APP中,对于这一类资源文件的访问,应用层代码需要通过文件名对其进行访问);

编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中。

6. 对APK文件进行签名

一旦APK文件生成,它必须被签名才能被安装在设备上。

在开发过程中,主要用到的就是两种签名的keystore。一种是用于调试的debug.keystore,它主要用于调试,在Eclipse或者Android Studio中直接run以后跑在手机上的就是使用的 debug.keystore

另一种就是用于发布正式版本的 relese.keystore ,需要开发者自己配置。

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

如果你发布的apk是正式版的话,就必须对APK进行对齐处理,用到的工具是 zipalign ,目录 sdk\build-tools\25.0.0\zipalign

对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用就是减少运行时内存的使用。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Using Google App Engine

Using Google App Engine

Charles Severance / O'Reilly Media / 2009-5-23 / USD 29.99

With this book, you can build exciting, scalable web applications quickly and confidently, using Google App Engine - even if you have little or no experience in programming or web development. App Eng......一起来看看 《Using Google App Engine》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具