美文网首页
Android APP 编译流程

Android APP 编译流程

作者: _喝喝酒吹吹风_ | 来源:发表于2020-08-20 13:16 被阅读0次

流程

  1. 编译
  2. DEX
  3. 打包
  4. 签名
  5. 对齐

对齐的作用

根本目的是帮助操作系统更高效率的根据请求索引资源,可以减少CPU访问内存的次数,但是缺点是增加了存储空间

android 编译流程:

android-build-flow.jpg

APK包结构

r 文件夹

项目工程中的 res目录,包括图片、字符串等等
该目录下的资源会被映射到R.java文件中

assets 文件夹

文件夹目录保留工程中assets目录,其他工程下的、jar包中的assets也会合并到该assets目录下,该目录下的资源不会被映射到R.java文件中,访问的时候需要AssetManager类

lib 文件夹

包含所有的so文件,so目录的路径保留原有的路径

META-INF目录

信息描述,签名
所有文件的SHA1-Digest 签名,防止其他程序篡改apk包中的文件

AndroidManifest文件

用来做组件查找

classes.dex文件

虚拟机执行的文件

resources.arsc文件

资源文件索引

D8 R8 和 DEX 的区别

D8 和 DX 比较
  • 编译速度更快
  • 输出的 .dex 文件更小
  • 同时却能保持相同乃至更出色的应用运行时性能。
  • D8通过脱糖支持Java8,开启android.enableD8.desugaring的话,会影响所有读写.class字节码的开发工具,因为会使用JAVA8格式。如果不想.class文件中有JAVA8则可以将android.enableD8.desugaring关闭,则可以将JAVA8的特性转为JAVA7的特性。
D8脱糖

脱糖合并进D8可以减少编译时间,优化更多代码,但是字节码处理工具必须支持JAVA8

  1. .class -> desugar -> ... -> D8 -> .DEX
  2. .class -> [desugar-D8] -> .DEX
Jack编译器

之前的编译

  1. graph LR
  2. Java_Source-.Javac.->Java_ByteCode
  3. Java_ByteCode-.dx.->dex

Jack编译:依赖Java字节码的第三方库在新的编译器体系下就不能使用了,成本偏大

  1. graph LR
  2. Java_Source-.Jack_Compiler.-dex
R8
  • R8的流程
    1. desugaring(脱糖)
    2. shrinking (压缩)
    3. obfuscating(混淆)
    4. optimizing (优化)
    5. dexing (打包成dex)
  • R8包含D8所有功能
  • R8新增的功能
    • 代码压缩:安全地从App及其库依赖项中删除未使用的类,字段,方法和属性。
    • 资源压缩:从打包的App中删除未使用的资源,包括应用程序库依赖项中未使用的资源。它与代码压缩一起使用,这样一旦删除了未使用的代码,也可以安全地删除不再引用的资源。
    • 代码混淆:使用简短无意义的名称重命名代码里的类,字段和方法,从而减少DEX文件大小。R8和Proguard 相比,R8 可以更快地缩减代码,同时改善输出大小
    • 代码优化:删除未使用的代码或重写代码使其更简洁。
dex 拆分
refrence
  1. [Android D8 编译器 和 R8 工具]https://blog.csdn.net/Mr_dsw/article/details/90141647
  2. [使用dx将class转dex总结] https://www.jianshu.com/p/16efe657ec7e

相关文章

  • Android App 编译流程

    app编译流程笔记 编译步骤 使用 aapt 生成 R.java 类文件 使用 aidl.exe 将*.aidl文...

  • Android APP 编译流程

    流程 编译 DEX 打包 签名 对齐 对齐的作用 根本目的是帮助操作系统更高效率的根据请求索引资源,可以减少CPU...

  • Android Apk包瘦身

    首先我们来了解Android编译打包流程 1.Android编译打包流程及APK构成 1).通过Java编译器对于...

  • Android Apk包瘦身

    目录 1、Android 编译打包流程2、Apk包瘦身 1、Android 编译打包流程及APK构成 1.1、An...

  • 最新Android App 编译流程详解

    Android Gradle Plugin 的下载,编译,debug 1.1 下载 安装 repo: 初始化并下载...

  • 编译移植Android ARM源码

    [TOC] 编译移植Android ARM源码 android源码编译的四个流程:1. 源码下载; 2. 构建编译...

  • Android 应用启动系列文章

    Android app启动流程:调用startProcessLocked的几种情况(1)Android app启动...

  • Android App 打包编译流程(Simple版)

    PS:以下为学习总结,not原创。打包过程的细节,请看老罗博客:Android应用程序资源的编译和打包过程分析 a...

  • 目录

    Android性能测试工具Emmagee APP测试方法总结 APP测试点总结 Android APP测试流程 A...

  • 原生、ReactNative、Flutter三者在比较

    原生 完全靠双手开发Android 编译流程.java文件编译成.class文件,然后被dex工具编译成.dex文...

网友评论

      本文标题:Android APP 编译流程

      本文链接:https://www.haomeiwen.com/subject/cugtjktx.html