Gradle编译-APK编译过程

1.再谈Dalvik

在早期的Android设备中(Android5.0以下)都是使用的Dalvik虚拟机,Dalvik支持经过转换的.dex文件。.dex格式是专为Dalvik设计的一种适合内存和处理器速度有限的系统。

但是在Android5.0,google用ART全面取代的Dalvik。Android7.0中又添加了JIT编译器,使得Android性能也有不少提升。


Gradle编译-APK编译过程_第1张图片
20180807-193741(eSpace).png

上图为从Android源文件开始,最终到APK的过程。
下面博客文章详细介绍了dalvik虚拟机,可供参考学习。
https://www.cnblogs.com/lao-liang/p/5111399.html

2.class文件和dex文件的区别

dvm(art)和jvm属于不同的虚拟机平台,不同平台要求执行的文件类型也就不一样
dvm(art)--.dex文件
jvm--.class文件

在编译和生成上
java source --.class文件 ---jvm执行
java source --.class文件 ---.dex文件 --- dvm执行

3.从Dalvik到ART

Android Runtime (ART) 是 Android 上的应用和部分系统服务使用的托管式运行时。ART 及其前身 Dalvik 最初是专为 Android 项目打造的。作为运行时的 ART 可执行 Dalvik 可执行文件并遵循 Dex 字节码规范。

ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此针对 Dalvik 开发的应用也能在 ART 环境中运作。不过,Dalvik 采用的一些技术并不适用于 ART。

ART的功能
1.预先 (AOT) 编译
使用ART编译器时,应用程序在安装期间就已经把dex字节码翻译并存储在设备上,运行时,只需要执行这些翻译好的就可以了,因此执行速度也快了不少。
2.垃圾回收方面的优化

  • 只有一次(而非两次)GC 暂停
  • 在 GC 保持暂停状态期间并行处理
  • 在清理最近分配的短时对象这种特殊情况中,回收器的总 GC 时间更短
  • 优化了垃圾回收的工效,能够更加及时地进行并行垃圾回收,这使得 事件在典型用例中极为罕见
  • 压缩 GC 以减少后台内存使用和碎片

3.开发和调试方面的优化

4 APK编译过程和原理

构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程。构建流程非常灵活,因此了解它的一些底层工作原理会很有帮助。


Gradle编译-APK编译过程_第2张图片
build-process_2x.png
  1. 编译器将源代码转换成 DEX(Dalvik Executable) 文件(其中包括运行在 Android 设备上的字节码),将所有其他内容转换成已编译资源。
  2. APK 打包器将 DEX 文件和已编译资源合并成单个 APK。不过,必须先签署 APK,才能将应用安装并部署到 Android 设备上。
  3. APK 打包器使用调试或发布密钥库签署您的 APK:
    • 如果构建的是调试版本的应用(即专用于测试和分析的应用),打包器会使用调试密钥库签署应用。Android Studio 自动使用调试密钥库配置新项目。
    • 如果您构建的是打算向外发布的发布版本应用,打包器会使用发布密钥库签署您的应用。
  4. 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时的内存占用。

你可能感兴趣的:(Gradle编译-APK编译过程)