【前言】

28.0.1 及更高版本中:android_sdk/build-tools/version/’

1、d8基本用法

d8 [options]

其中,可以是 *.class 文件或容器(例如 JAR、APK 或 ZIP 文件)的任意组合。您还可以添加 DEX 文件作为 d8 的输入,以将这些文件合并到 DEX 输出中,这在包含增量构建的输出时很有用。

1)你可以将一个目录下的所有.class文件编译为dex

d8 --output C:\Users\Administrator\Desktop\dex C:\Users\Administrator\Desktop\y\com\sswl\channel\*.class

上面就是将C:\Users\Administrator\Desktop\y\com\sswl\channel目录下的所有.class文件编译为dex文件并输出到C:\Users\Administrator\Desktop\dex目录下

2)假如你想把多个目录下的.class文件编译为dex,那么可以把多个路径空格分隔就可以了

d8 --output C:\Users\Administrator\Desktop\dex C:\Users\Administrator\Desktop\y\com\sswl\channel\*.class C:\Users\Administrator\Desktop\y\com\sswl\h5\*.class

上面是将C:\Users\Administrator\Desktop\y\com\sswl\channel目录与C:\Users\Administrator\Desktop\y\com\sswl\h5目录下的所有.class文件编译为dex输出到C:\Users\Administrator\Desktop\dex目录

3)类似dx,你也可以直接把jar或者zip压缩包里面的所有.class文件编译为dex

d8 --output C:\Users\Administrator\Desktop\dex C:\Users\Administrator\Desktop\y.jar

上面是将C:\Users\Administrator\Desktop\y.jar编译为dex输出到C:\Users\Administrator\Desktop\dex目录下,当然也可以输出为jar或者zip,实际就是把dex放进压缩包里面,比如:

d8 --output C:\Users\Administrator\Desktop\out.jar C:\Users\Administrator\Desktop\y.jar

2、option可选标记

默认情况下,d8 会将 Java 字节码编译为优化的 DEX文件,并在其中包含相关的调试信息,以供您在运行时用于调试代码。然而,您也可以添加可选标记来执行各种操作,例如执行增量构建、指定应编译到主DEX 文件中的类,以及指定使用 Java 8 语言功能所需的其他资源对应的路径。

下表介绍了可与 d8 一起使用的可选标记。

选项

说明

–debug

编译 DEX 字节码以在其中包含调试信息,例如调试符号表。此选项默认处于启用状态。要在 DEX 字节码中包含调试信息,d8 要求输入 Java 字节码中包含此信息。例如,如果您使用 javac 编译代码,则需要传递 -g 标记,以在输出的 Java 字节码中包含调试信息。当为应用或库的发布版本编译 DEX 文件时,请改用下述 --release 标记。

–release

编译 DEX 字节码,而不包含调试信息。不过,d8 包含在生成堆栈轨迹和记录异常时使用的一些信息。在为公开发布版本编译字节码时,应该传递此标记。

–output path

为 DEX 输出指定所需的路径。默认情况下,d8 会输出当前工作目录中的 DEX 文件。如果您指定 ZIP 或 JAR 文件的路径和名称,则 d8 会创建指定的文件并将 DEX 输出文件包含在其中。如果指定现有目录的路径,则 d8 会将 DEX 文件输出到该目录中。

–lib android_sdk/platforms/api-level/android.jar

指定指向 Android SDK 的 android.jar 的路径。编译使用 Java 8 语言功能的字节码时需要使用此标记。

–classpath path

指定 d8 在编译项目的 DEX 文件时可能需要使用的类路径资源。特别是在编译使用 Java 8 语言功能的字节码时,d8 会要求您指定特定的资源。

–min-api number

指定您希望 DEX 输出文件支持的最低 API 级别。

–intermediate

传递此标记,可告知 d8 您并非要编译项目的全部 Java 字节码集。此标记在执行增量构建(而不是编译您想在设备上运行的优化 DEX 文件)时非常有用,d8 会创建中间 DEX 文件,并将其存储在指定的输出或默认路径中。如果要编译要在设备上运行的 DEX 文件,请不要使用此标记,并指定中间 DEX 类的路径作为输入。

–file-per-class

将每个类编译到单独的 DEX 文件中。启用此标记后,您只需重新编译已更改的类,从而执行更多增量构建。使用 Android Gradle 插件执行增量构建时,此优化默认处于启用状态。如果您还指定了 --main-dex-list,则无法使用此标记。

–no-desugaring

停用 Java 8 语言功能。仅当您不想编译使用 Java 8 语言功能的 Java 字节码时,才可使用此标记。

–main-dex-list path

指定列出 d8 应包含在主 DEX 文件中的类的文本文件,该文件的名称通常为 classes.dex。也就是说,如果您不使用此标记指定类列表,d8 将无法保证主 DEX 文件中会包含哪些类。由于 Android 系统在启您应用时会先加载主 DEX 文件,因此您可以利用此标记将特定的类编译到主 DEX 文件中,从而使它们在应用启动时得到优先加载。这在支持旧版 multidex 时特别有用,因为在加载旧版 multidex 库之前,只有主 DEX 文件中的类在运行时可用。请记住,该主 DEX 文件仍须满足 64K 引用限制。因此,请确保不要为主 DEX 文件指定太多类,否则会出现编译错误。默认情况下,在使用 --main-dex-list 指定类时,d8 只会包含主 DEX 文件中的类,这是为了便于调试与主 DEX 文件中缺少的类相关的问题。如果您指定的是 --release 模式,则 d8 会尝试在主 DEX 文件中包含尽可能多的其他类(直到达到 64K 限制为止),从而减少打包到应用发布版本中的 DEX 文件的数量。如果您还指定了 --file-per-class,则无法使用此标记。

–version

输出您当前使用的 d8 版本。

–help

输出与使用 d8 有关的帮助文本。

看完上述各个option的描述之后,我们来展示一下各种实用的场景:

1、假如我们只是更改某个class文件,那么我们使用增量构建标识--intermediate与单独类编译标识--file-per-class来将单独的class文件编译成dex文件

d8 C:\Users\Administrator\Desktop\classes\com\sswl\gameprotect\activity\PopupActivity.class --intermediate --file-per-class --output C:\Users\Administrator\Desktop\dex

上面就是将C:\Users\Administrator\Desktop\classes\com\sswl\gameprotect\activity\PopupActivity.class单独变成dex,输出到C:\Users\Administrator\Desktop\dex目录下

2、如果您已在多次增量构建中将项目的所有字节码编译到 DEX 文件中,则可以通过将中间 DEX 文件的目录传递给 d8 来执行完整构建,如下所示。此外,您也可以使用 --main-dex-list 指定想让 d8 编译到主 DEX 文件中的类。由于输入是已编译为 DEX 字节码的一组文件,因此,完成此构建的速度应该比完成干净构建更快。

d8 C:\Users\Administrator\Desktop\dex\com\sswl\plugindemo\*.dex --release --output C:\Users\Administrator\Desktop\all-dex

上面是将C:\Users\Administrator\Desktop\dex\com\sswl\plugindemo目录下的所有dex文件合并输出到C:\Users\Administrator\Desktop\all-dex目录下

本文地址:https://blog.csdn.net/qq_43278826/article/details/107697066

希望与广大网友互动??

点此进行留言吧!

dx dex java1.8_Java 字节码编译为Dex,d8比dx更好用!相关推荐

  1. Android: .java文件转.dex和java字节码

    一..java文件转.dex 首先将 .java 文件转成 .class 文件(例如:Hello.java) javac Hello.java -> 得到Hello.class [这里有一个坑, ...

  2. 抖音Android包体积优化探索:从Class字节码入手精简DEX体积

    前言 众所周知,应用安装包的体积会十分影响用户的应用下载速度和安装速度.据 GoolgePlay 平台对外发布相关的包大小对转化率影响的数据,我们可以看到随着包大小的增加,安装转化率总体呈下降的趋势. ...

  3. 提升R语言运行效率-转换为字节码编译

    # 将函数.文件.包编译成字节码文件可以大大提高运行速度,这是系统性能优化的重要方法之一 # 实验发现使用compiler包编译函数非常简单.方便,性能提升效果立竿见影 # compiler包似乎是随 ...

  4. 【Android Gradle 插件】DexOptions 配置 ⑤ ( additionalParameters 属性配置 | --minimal-main-dex 参数最小化主 dex 字节码 )

    文章目录 一.dx --minimal-main-dex 参数 1.参数简介 2.配置 main dex 保留文件 3.配置 android#buildTypes 4.配置 android#dexOp ...

  5. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  6. Android AOP之字节码插桩

    背景   本篇文章基于<网易乐得无埋点数据收集SDK>总结而成,关于网易乐得无埋点数据采集SDK的功能介绍以及技术总结后续会有文章进行阐述,本篇单讲SDK中用到的Android端AOP的实 ...

  7. 第三章 Dalvik 可执行格式与字节码规范

    文章目录 Dalvik 虚拟机 Dalvik 虚拟机特点 Dalvik 虚拟机与 Java 虚拟机的区别 运行的字节码不同 Dalvik 可执行文件体积更小 虚拟机架构不同 实例 分析上述实例 Jav ...

  8. 下载AOSP源码编译、调试、刷机

    一.准备工作 系统最好是Linux或者mac OS(本文基于Ubuntu). Ubuntu设置永不休眠,在setting中搜索power.blank-screen选择never. 一块大一点儿的硬盘, ...

  9. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

最新文章

  1. 讯wifi_罗永浩直播带货,网友为何pick讯飞智能录音笔?
  2. automation服务器不能创建对象是什么意思_从运营商角度来考虑为什么NAT不能搭建服务器?...
  3. Hadoop MapReduce实例:按照手机号归属地分区统计手机上网流量(Reduce Task进程数设置)
  4. luogu1341 无序字母对
  5. asp.net core 系列之Performance的 Response compression(响应压缩)
  6. iOS modal view的关闭和显示问题
  7. php_self nginx,nginx中的PATH_INFO为什么会影响$_SERVIER['PHP_SELF']
  8. 八皇后问题python回溯_解决Python基于回溯法子集树模板实现8皇后问题
  9. java 类型 转换 valueOf和parse...
  10. MR Mapper类
  11. 面向对象编程风格 VS 基于对象编程风格
  12. 函数编程中的递归思想
  13. getent passwd 不能访问到 ldap 的用户
  14. 3D打印笔 画出模型
  15. LSTM做预测遇到的错误总结
  16. 前端知识零零散散,如何高效学习?
  17. error[E0308]: Rust 闭包函数锁定参数类型
  18. 如何利用H5营销活动来实现活动目标?
  19. 如何设计神经网络的硬件加速器
  20. 《ANSYS Workbench 16.0超级学习手册》——1.2 ANSYS Workbench 16.0平台及模块

热门文章

  1. iconfont-阿里巴巴矢量图标库 Symbol引入无法修改颜色问题
  2. Win10 一机两用
  3. python数据预处理的方法_文本数据预处理的方法
  4. unity获取游戏对象及修改游戏对象的属性,对于游戏对象的基本操作
  5. 微信小程序之组件(一)
  6. 让自己的电脑插上自己的U盘才可以启动
  7. QT多线程的使用(moveToThread方法)
  8. 社会网络——信管考研方向之管科图情论文分析
  9. Intellij Idea方法注释模板设置
  10. 数据分析软件选Tableau 和 Power BI,不不不,我选FineBI,一个被雪藏的利器。