参考: 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

全称是JavaCompiler,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分析应用程序的构建过程

    为了方便Android应用开发要求我们Androidproject编制和包装有了更深入的了解,例如,我们知道这是做什么的每一步,境和工具.输入和输出是什么.等等. 在前文<命令行下Android ...

  2. Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件

    目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...

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

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

  4. Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程

    下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...

  5. Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

    作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...

  6. 关于Android 构建

    在简书上面有系列关于Android 的文章,还不错,部分同学可以在开发过程中阅读和学习:www.jianshu.com/collection/3fde3b545a35 关于Android 构建,看到这 ...

  7. Android系统启动过程-uBoot+Kernel+Android

    摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...

  8. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  9. Android编译过程详解(一)

    Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...

随机推荐

  1. STC15W408AS简单使用教程-简单的光强检测!

    第一步:搭建开发环境 安装最新版本的STC_ISP程序烧录软件,链接:http://pan.baidu.com/s/1slLPnOD 密码:6bov 安装keil C51的51系列单片机集成IDE软件 ...

  2. TF:Tensorflor之session会话的使用,定义两个矩阵,两种方法输出2个矩阵相乘的结果—Jason niu

    import tensorflow as tf matrix1 = tf.constant([[3, 20]]) matrix2 = tf.constant([[6], [100]]) product ...

  3. RBM:深度学习之Restricted Boltzmann Machine的BRBM学习+LR分类—Jason niu

    from __future__ import print_function print(__doc__) import numpy as np import matplotlib.pyplot as ...

  4. Java代码混淆工具ProGuard

    目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...

  5. muduo学习笔记(六) 多线程的TcpServer

    目录 前言 多线程TcpServer EventLoopThreadPool 线程池设计模式 muduo中的使用 连接的建立.消息.销毁 on_connection on_message on_clo ...

  6. switch反汇编

    以下总结为debug模式

  7. 最近在搞gitlab发现2个不错的开发流程分享一下

    一个不错的gitlab开发流程 http://blog.51cto.com/sgk2011/1925922 不错的git开发流程 https://www.cnblogs.com/coderzl/p/7 ...

  8. vue跨域解决方法

    针对不在同一服务器,很可能出现跨域问题,解决方法 注意:修改了配置文件,需要重启才能生效

  9. 树莓派上配置electron记录

    首先是最新版本的树莓派镜像默认不开启ssh,所以烧写好系统之后没法ssh登录 解决方法就是在烧写的内存卡分区内建立一个ssh文件(无后缀名),这样启动的时候就有ssh服务了 在~/.bashrc里面添 ...

  10. Stack [NOIP模拟] [组合数学经典]

    Description栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你已经知道栈的操作有两种: push 和 pop ,前者是将一个元素进栈,后者是将栈顶元素弹出.现 ...