参考: http://blog.csdn.net/shangmingchao/article/details/47375111

首先,需要了解一下构建APK的七大工具:

aapt

全称是Android Asset Packaging Tool,Android资源打包工具。可以将资源文件编译成二进制文件,还可以查看、创建、更新zip格式的文档附件(zip、jar、apk)。

aidl

全称是Android Interface Definition Language,Android接口定义语言。可以将.aidl文件编译成.Java文件。

javac

全称是Java Compiler,Java编译器。可以将Java语言编写的类和接口定义文件(.java)编译成字节码类文件(.class)。

dx

全称是Dalvik Executable,Dalvik虚拟机可执行程序。可以将部分.class文件转换成一个.dex文件。

apkbuilder

可以将.dex文件、已经打包好的资源文件、libs中的Native库等其它资源打包成未签名的.apk文件。SDK3.0之后废弃了该工具,可以直接利用sdklib.jar中的APKBuilderMain.class实现其功能。

jarsigner

全称是Java Archive Signer,Jar签名工具。可以为jar文件签名,还可以校验jar文件的签名和完整性。

zipalign

可以优化apk。以帮助操作系统更高效地根据请求获取资源,将Data structure alignment(DSA,数据结构对齐标准)限定为4-byte boundaries。

这七大工具就包含在 我们配置Android SDK时下载的 Android SDK Build-tools中,有了这“七个小矮人”的帮助,我们就能顺利地将IDE中的项目变成可以在设备上运行的应用程序了,下图简单描述了这个过程,是官网上的一张图^_^。

详细的构建过程如下图所示:

也是官网上的一张图,哈哈。总之就是利用各种工具以生成中间文件(intermediates)的形式最终生成apk文件。下面是关于这个过程的一些解释:

①aapt工具将程序的资源文件(如AndroidManifest.xml文件、Activity中的xml布局文件)进行编译,并生成供Java代码引用资源的R.java文件。

②aidl工具将所有.aidl接口转换成.java接口。

③所有的Java代码(包括R.java和.aidl文件)被Java编译器编译成.class文件。

④dex工具将所有的.class文件转换成Dalvik字节码,第三方库和所有在module构建中用到的.class文件也将被转换成.dex文件,以便被打包成最终的.apk文件。

⑤所有无需编译的资源(如图片)、已经编译好的资源,以及.dex文件被发往apkbuilder工具以打包成一个.apk文件。

⑥打包好了.apk文件后,一旦apk被创建,在安装到设备之前必须用debug key或release key签名。

⑦最终,若应用已经用发行模式签名了,你必须用zipalign工具对齐.apk。因为对齐最终的apk有助于该应用在设备上运行时减小内存的使用。

Android构建对应的API Level参见:API_LEVEL。

android构建过程相关推荐

  1. Android构建流程——篇二

    文章目录 预操作 任务列表 如何查看一个task类 Task1: checkDebugClasspath 1. input/output 2. 如何找到任务实现类 3. 核心类(AppClasspat ...

  2. android Android项目构建过程

    今天,简单讲讲android studio如何把写好的工程打包成apk的. 平时开发过程中我们通过android studio编写完成android项目之后直接点击 Run 'app'就可以在buil ...

  3. App打包原理——Android项目构建过程

    从开发者直观感受上来说,项目构建就是从Android Studio 点击'run'到生成apk之间的过程.今天我们讲解下这个过程中,用到的构建工具和构建的过程. 一)如下是一个apk解压后的目录,我们 ...

  4. android 详细构建过程,Android构建模块详细步骤概述

    大家可能还记得,我们51CTO在一篇文章中介绍过有关Android模块的一些基本概念,相信大家应该可以对这些模块有一个深刻的认识了.在这里,我们会分步骤详细为大家讲解一下Android构建模块的相关知 ...

  5. Android启动过程以及各个镜像的关系

    Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...

  6. 《Android构建MVVM》系列(一) 之 MVVM架构快速入门

    前言 本文属于<Android构建MVVM>系列开篇,共六个篇章,详见目录树. 该系列文章旨在为Android的开发者入门MVVM架构,掌握其基本开发模式. 辅以讲解Android Arc ...

  7. android 构建者设计模式,Android中的设计模式之构建者模式

    参考 <设计模式:可复用面向对象软件的基础 >3.2 Builder 生成器--对象创建型模式 <Android源码设计模式解析与实战>第3章 Builder模式 意图 将一个 ...

  8. APK构建过程-命令行编译

    官方对APK构建过程的介绍 官方 - 构建流程介绍 典型 Android 应用模块的构建流程,按照以下常规步骤执行: 编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 An ...

  9. 迁移学习+TfLite Android构建自己的喵咪识别APP(一)

    迁移学习+TfLite Android构建自己的喵咪识别APP(一) 本教程是我自己实践过程的记录,具体的理论细节请参照其他博客 一.基础知识 官方实践教程一: 迁移学习实现图像分类器 https:/ ...

最新文章

  1. 港中文自动驾驶点云上采样方法
  2. 来认识世界上第一支AI基金:模仿股票分析师 365天无间断工作
  3. java导出csv文件使用Excel打开乱码问题
  4. Windows异常学习笔记(一)—— CPU异常记录模拟异常记录
  5. FFmpeg转OpenCV Mat显示
  6. 【Verilog语法】PC-relatve branch 以及 Delay Slot 的含义
  7. siwft初学(一)
  8. KOA中的ejs的基本使用
  9. C++ 虚函数 纯虚函数 抽象类 代码示例
  10. qml 时间控件_Qt6官方最新消息:桌面样式Qt quick Controls 2支持大多控件,委托更少,运行更流畅...
  11. docker每次都重新拉取远程镜像的问题
  12. *第八周*数据结构实践项目四【字符串加密】
  13. kubernetes多节点集群搭建过程分析
  14. 泛泰A870 Recovery KitKat 合集
  15. 如何查看自己windows电脑的IP地址
  16. python爬取淘宝数据遇见的坑
  17. kafka内外网连接问题
  18. 一张老照片上看故乡内江
  19. 【报告分享】小红书·新消费浪潮下的决策价值之地-小红书(附下载)
  20. JVM监控及诊断工具-GUI篇

热门文章

  1. js控制复选框选中显示不同表单_Vue之 表单
  2. linux 有用的命令,linux有用命令(持续更新)
  3. java中输入char类型_java中如何输入char类型
  4. @excel注解_java bean 一对多,多对一 poi导出excel表格
  5. 【项目管理】质量管理
  6. 软件开发定律系列之布鲁克斯定律有感
  7. 给新手项目经理的12条建议
  8. Dockerfile中通过ENV指定动态参数在RUN时传递参数(部署后台jar包时指定端口为例)
  9. SqlServer在附加数据库时提示:无法打开物理文件**.mdf 操作系统错误拒绝访问
  10. Linux-通过XShell使用sz命令提示找不到