android构建过程
参考: 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构建过程的更多相关文章
- Android分析应用程序的构建过程
为了方便Android应用开发要求我们Androidproject编制和包装有了更深入的了解,例如,我们知道这是做什么的每一步,境和工具.输入和输出是什么.等等. 在前文<命令行下Android ...
- Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件
目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...
- Android启动过程以及各个镜像的关系
Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...
- Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程
下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...
- Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解
作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...
- 关于Android 构建
在简书上面有系列关于Android 的文章,还不错,部分同学可以在开发过程中阅读和学习:www.jianshu.com/collection/3fde3b545a35 关于Android 构建,看到这 ...
- Android系统启动过程-uBoot+Kernel+Android
摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
随机推荐
- STC15W408AS简单使用教程-简单的光强检测!
第一步:搭建开发环境 安装最新版本的STC_ISP程序烧录软件,链接:http://pan.baidu.com/s/1slLPnOD 密码:6bov 安装keil C51的51系列单片机集成IDE软件 ...
- TF:Tensorflor之session会话的使用,定义两个矩阵,两种方法输出2个矩阵相乘的结果—Jason niu
import tensorflow as tf matrix1 = tf.constant([[3, 20]]) matrix2 = tf.constant([[6], [100]]) product ...
- RBM:深度学习之Restricted Boltzmann Machine的BRBM学习+LR分类—Jason niu
from __future__ import print_function print(__doc__) import numpy as np import matplotlib.pyplot as ...
- Java代码混淆工具ProGuard
目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...
- muduo学习笔记(六) 多线程的TcpServer
目录 前言 多线程TcpServer EventLoopThreadPool 线程池设计模式 muduo中的使用 连接的建立.消息.销毁 on_connection on_message on_clo ...
- switch反汇编
以下总结为debug模式
- 最近在搞gitlab发现2个不错的开发流程分享一下
一个不错的gitlab开发流程 http://blog.51cto.com/sgk2011/1925922 不错的git开发流程 https://www.cnblogs.com/coderzl/p/7 ...
- vue跨域解决方法
针对不在同一服务器,很可能出现跨域问题,解决方法 注意:修改了配置文件,需要重启才能生效
- 树莓派上配置electron记录
首先是最新版本的树莓派镜像默认不开启ssh,所以烧写好系统之后没法ssh登录 解决方法就是在烧写的内存卡分区内建立一个ssh文件(无后缀名),这样启动的时候就有ssh服务了 在~/.bashrc里面添 ...
- Stack [NOIP模拟] [组合数学经典]
Description栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你已经知道栈的操作有两种: push 和 pop ,前者是将一个元素进栈,后者是将栈顶元素弹出.现 ...