图解apk的打包过程
首先看一张官方的流程图:
编译打包步骤:
1. 打包资源文件,生成R.java文件
打包资源的工具是aapt(The Android Asset Packaing Tool)该程序位于Android\sdk\build-tools\25.0.0\aapt.exe。
在这个过程中,项目中的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(Android Interface Definition Language)(Android\sdk\build-tools\25.0.0\aidl.exe),即Android接口描述语言。
aidl工具解析接口定义文件然后生成相应的Java代码接口供程序调用。如果在项目没有使用到aidl文件,则可以跳过这一步。
3. 编译项目源代码,生成class文件
项目中所有的Java代码,包括R.java和.aidl文件,都会变Java编译器(javac)编译成.class文件,生成的class文件位于工程中的bin/classes目录下。
4. 转换所有的class文件,生成classes.dex文件
dx工具生成可供Android系统Dalvik虚拟机执行的classes.dex文件,该工具位于(Android\sdk\build-tools\25.0.0\dx.bat)。
任何第三方的libraries和.class文件都会被转换成.dex文件。dx工具的主要工作是将Java字节码转成成Dalvik字节码、压缩常量池、消除冗余信息等。
5. 打包生成APK文件
所有没有编译的资源,如images、assets目录下资源(该类文件是一些原始文件,APP打包时并不会对其进行编译,而是直接打包到APP中,对于这一类资源文件的访问,应用层代码需要通过文件名对其进行访问);编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中。
打包的工具apkbuilder位于 android-sdk/tools目录下。apkbuilder为一个脚本文件,实际调用的是(Android\sdk\tools\lib)文件中的com.android.sdklib.build.ApkbuilderMain类。
6. 对APK文件进行签名
一旦APK文件生成,它必须被签名才能被安装在设备上。
在开发过程中,主要用到的就是两种签名的keystore。一种是用于调试的debug.keystore,它主要用于调试,在Eclipse或者Android Studio中直接run以后跑在手机上的就是使用的debug.keystore。
另一种就是用于发布正式版本的keystore。
7. 对签名后的APK文件进行对齐处理
如果你发布的apk是正式版的话,就必须对APK进行对齐处理,用到的工具是zipalign(Android\sdk\build-tools\25.0.0\zipalign.exe)
对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用就是减少运行时内存的使用。
图解apk的打包过程相关推荐
- ❤️Android Apk 的打包过程 ❤️ 只需两幅图
官方介绍 在分析安装过程之前,需要先了解一下 Android 项目是如何经过编译->打包生成最终的 .apk 格式的安装包.谷歌有一张官方图片来描述 apk 的打包流程,如下图所示. Andro ...
- android apk编译打包过程
Android安装包的后缀都是.apk, apk是Android Package的缩写. 解压apk文件后包含AndroidManifest.xml.assets目录.classes.dex(还可能有 ...
- Android应用程序(APK)的编译打包过程
前言 android系统上所识别的安装包后缀名为.apk 1.通过aapt工具打包资源文件和清单文件到R.java中. 2.通过aidl工具将aidl文件转为java文件 3.上面所产生的java文件 ...
- gradle编译打包过程 之 ProcessAndroidResources的源码分析
首先,如何查看gradle源码,我们在项目里依赖com.android.tools.build:gradle即可,如下: compile gradleApi() compile 'com.androi ...
- Android APK 打包过程 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- android Apk打包过程概述_android是如何打包apk的
最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程. 流程概述: 1.打包资源文件,生成R. ...
- Apk的编译打包过程
今天跟着大佬的Blog来学习一下 Apk打包编译的流程.传送门 流程图 上图中的绿色部分就是APK编译打包的工具.从图中可以知道使用的工具有: APPT.AIDL.Java Compiler(java ...
- 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
文章目录 一.动态字节码技术 二.Dalvik & ART 虚拟机 三.Android 字节码打包过程 总结 一.动态字节码技术 动态字节码技术 就是在 运行时 , 动态修改 Class 字节 ...
- 【Android】APK的打包流程
APK打包流程 apk其实就是一个压缩包,里面有lib,META-INF,classes.dex,res,resources.arsc等文件,我们对一个apk文件进行解压,可以发现里面其实有许多文件: ...
最新文章
- Windows server 2008 R2 通过策略关闭密码复杂性
- Linux下C程序的反汇编【转】
- 物流链云平台云ROS——看得见的成本节约
- AICompiler动态shape编译框架案例和效果数据
- 深入解析JNA—模拟C语言结构体
- (4) XOS 源码详解: os_s_xxxx.s 汇编代码的 堆栈空间定义,比较简洁的方式
- Dcmtk在PACS开发中的应用(基础篇) 第二章 打印影像(胶片) 作者 冷家锋
- 微博html5版登录网址,微博网页版登录入口
- matlab人口增长线性回归拟合_Matlab线性回归(拟合)
- 发票专用驱动sjz_收藏!增值税发票(发票勾选)选择确认平台使用手册
- 服务器受美国保护网站,该网站服务器受美国保护
- new一个对象的时候发生了什么?
- ELF文件格式, ELF文件是什么,里面包含什么内容
- CentOS 6.2 LNMP搭建
- 7-2 输油管道问题
- MediaCodec 、x264、faac 实现音视频编码并通过 rtmp 协议实现推流
- Centos 系统分区扩容操作指南
- 读论文,第三天:Physical Inertial Poser (PIP): Physics-aware Real-time Human Motion Tracking from Sparse
- STM32F4xx的NAND Flash应用事项
- 如何使用 PHP 发送 Web 推送通知