简单build流程图

官网给了我们一张非常简单的编译、打包、apk生成内容以及签名的图片。图片大体介绍了从Project到运行到设备或者模拟器的一个大体流程,我们也从中看到一个完整的apk包含如下内容:一个或多个dex文件、resources.arsc、未编译的资源文件以及AndroidManifest.xml文件等等

详细build流程图

官网给了我们一张非常清晰的打包流程图:

编译打包步骤:

1. 打包资源文件,生成R.java文件

打包资源的工具是aapt(The Android Asset Packaing Tool)(E:\Documents\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接口描述语言(E:\Documents\Android\sdk\build-tools\25.0.0\aidl.exe)。

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

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

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

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

dx工具生成可供Android系统Dalvik虚拟机执行的classes.dex文件,该工具位于(E:\Documents\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为一个脚本文件,实际调用的是(E:\Documents\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(E:\Documents\Android\sdk\build-tools\25.0.0\zipalign.exe)

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

java 打包apk_Android APK打包流程相关推荐

  1. android-xBuild apk差分与合成,zip差分与合成,lua打包,apk打包,png/jpg图片压缩

    android-xBuild 是一项集成了apk差分与合成,zip差分与合成,lua打包,apk打包,png/jpg图片压缩五大功能的开源项目 (github地址:https://github.com ...

  2. Android APK打包流程

    目录 一.概述 二.打包流程 1.打包资源文件,生成R.java文件 2.处理aidl文件,生成相应的Java文件 3.编译项目源代码,生成class文件 4.转换所有的class文件,生成class ...

  3. Mac打包Android的apk,【ReactNative】Mac下分分钟打包 Android apk

    Mac 下 ReactNative如何打包构建Android apk 的应用.该文章还差一个 打包发布到各个平台的教程 总结 打包 jsbundle代码 生成签名 添加签名到app中 打包成apk(打 ...

  4. html打包apk_将打包彻底一键化!Unity和Jenkins真是绝配

    说起打包,我们的QA简直是要抓狂,这个确实我也很同情他们.项目最开始打包是另一个同事做的,打包步骤是有些繁琐,但是项目上线后,不敢轻易动啊!每次他们打包总要跟我抱怨,国内版本打包步骤要10多步还能忍, ...

  5. java打包apk_Android中APK打包流程

    aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...

  6. 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

    文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...

  7. 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程

    哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...

  8. apk私钥_移动安全(二)|APK打包流程及签名安全机制初探

    0x00.今天我们聊什么? 今天我们聊些啥?许久不见,是该聊些啥了,话不多说,先来个五毛钱得,聊一聊胡小毛的Android逆向之路吧,当然,你们想知道的一定不是走了这么远的路,胡小毛今年是不是又长高了 ...

  9. Android中APK打包流程

    aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...

最新文章

  1. 教你一招超级简单的方法快速搞定grub.conf文件的丢失及损坏
  2. T-SQL MD5算法实现
  3. 一直在构建工作空间_国际资讯Python与地理空间分析
  4. xilinx fpga 开发工具vivado 软件的安装,使用详细教程
  5. 电脑如何获得管理员权限
  6. 3.2_ 1_ 虚拟内存的基本概念
  7. java 创建ssh用户秘钥,安装Java、Maven、Git,以及生成、拷贝密钥
  8. android 会话 java_java – Android会话管理
  9. java备份mysql的单个表_MySQL 使用java备份某张表的操作
  10. Apache Shiro Java 反序列化漏洞解决修复记录
  11. log4j的使用配置
  12. docker search oracle,Docker search 命令
  13. “微音乐”微信小程序实战开发过程
  14. Acer 4750 安装黑苹果_黑苹果 Mac OS 10.14.5 Mojave 安装
  15. DHTMLX.Suite.Pro 7.3.1
  16. FILCO连接WIN10出现PIN问题
  17. CSS动画实现的三种方式
  18. 小米手机自动进入Recovery恢复模式,且不停重启
  19. 模具毕业设计题目推荐 / 毕业设计(论文)说明书 CAD图纸 三维模型 开题报告 任务书 实习报告 答辩 ……
  20. 聊聊jvm的内存结构, 以及各种结构的作用

热门文章

  1. 洛谷P3376 【模板】网络最大流
  2. 55种网页常用小技巧
  3. OpenLdap 相关命令
  4. As3回调函数的使用方法
  5. 新的GNSS精度度量是怎样定义的?
  6. Proteus仿真STM32F103R6的寄存器版跑马灯程序
  7. 学Python10大理由:功能多、资源多、挣钱多!
  8. 解决windows显示开启HDR后chrome内截图泛白问题
  9. cjson调用的实例 c++
  10. Java中的几种引用类型_Java中的几种引用类型(转载)