问题标签 [android-d8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2750 浏览

android - D8:找不到类型“sun.misc.Unsafe”

在我的 android 项目中启用 D8 后,我开始看到这些警告:

.

项目成功构建,但在运行时,我看到这些错误日志,因此,应用程序功能受到影响。

经过一段时间的搜索,我无法找到任何有用的东西。请帮忙。

是的,如果 D8 被禁用并且其他一切保持不变,我在运行时不会遇到此错误。

0 投票
1 回答
355 浏览

java - r8.jar 位于 Android SDK 的什么位置?

我正在试用 Android 的D8 和 R8

正如文档所说,运行 D8 的命令如下:

对于 R8:

我找到了d8.jar里面%ANDROID_HOME%\build-tools\28.0.3\lib,但我找不到r8.jar

r8.jarAndroid SDK 位于何处?

0 投票
0 回答
119 浏览

android - 如何知道罐子何时需要脱糖(对于 d8.bat)

如何知道罐子何时需要脱糖?因为d8.bat有一个参数--no-desugaring,我想知道什么时候可以使用它

--no-desugaring:禁用 Java 8 语言功能。仅当您不打算编译使用 Java 8 语言功能的 Java 字节码时才使用此标志。

0 投票
1 回答
33 浏览

java - D8 dexer 引入后,android 中目前使用哪个编译器将Java 编译成.class 文件?

在不推荐使用 Jack 编译器并引入了 D8 后,java -> .class 文件部分再次被分离(与 jack 发生在一个步骤中不同),Oracle Java SEjavac编译器是否再次用于编译?

0 投票
1 回答
499 浏览

android-studio - 推荐使用哪个 Android Studio 3.3 Build 变体?

昨天刚刚发布的 Android Studio 3.3 在Build Variants选项卡中有新项目,我无法确定推荐发布哪个项目。我需要这些信息才能使用正确的auth库变体创建 SHA1,但我在文档中的任何地方都找不到它。

额外信息:我已启用D8并已R8启用,因此是否仍需要在这些构建变体minifyEnabled中包含或保护位置

在此处输入图像描述

0 投票
0 回答
636 浏览

android - 如何将标志传递给 D8 工具?

D8是 Android Studio 和 Android Gradle 插件用来将项目的 Java 字节码编译成 DEX 字节码的命令行工具。该命令有几个选项

--output path , --file-per-class , --no-desugaring , --main -dex-list等。

我有几个问题:

  1. 如何将此标志从 gradle 构建文件传递给 d8?
  2. 如何查看 Android Studio 在构建 apk 时实际使用的完整 d8 命令(带有所有标志)。

我已经尝试将DexOptions 命令additionalParameters属性一起使用。

但它似乎不起作用。

D8工具之前有DX工具。参数可以像这样发送到 DX: 在此处输入图像描述 但现在这不起作用。可能是因为现在D8dexing 任务名称不以dex单词开头。

我还注意到有android.enableD8.desugaring=true可以在gradle.properties文件中声明的属性。我假设这个属性打开了--no-desugaring标志D8

如果是这样,也许其他属性也可以通过gradle.properties文件设置?是否有所有可用android.enableD8.*属性的文档?

更新:

multiDexKeepFile每个 BuildType 块中都有可以声明的属性。看起来这个属性与D8的 --main-dex-list标志完全一样。好的,但是其他标志呢?

0 投票
0 回答
56 浏览

android - 如何将 D8 行为恢复到 Android Studio 3.1.x 中的行为?

对于 Google 的 Android (Studio) 开发人员支持团队来说,这确实是一个问题。如果有更好的渠道,请告诉我。

背景

我注意到我的应用在 Google Play 控制台中报告了越来越多的 libart.so 崩溃。同样的崩溃不会出现在 Crashlytics 中,我自己也无法重现它们,而且它们似乎只影响了几十个用户。我没有包括这些崩溃的任何细节,因为我认为这与我的问题无关,但我愿意接受其他方面的说服。

我发现了少量关于类似问题的报告,例如thisthis。这些给我的印象是根本原因可能是 Android 构建系统,特别是 D8 编译器。

我认为这些崩溃是在我发布了使用 Android Studio 3.2.1 构建的应用程序的新版本之后开始发生的。以前,我使用的是最新的 3.1.x Android Studio 版本,默认情况下已经使用 D8(对吗?),所以完全关闭 D8 似乎有点笨拙。这将我们带到我的...

问题

在使用 Android Studio 3.2.1 时,如何将 D8 行为恢复为最新的 Android Studio 3.1.x 版本?

额外问题: 3.2.0 版Android gradle 插件发行说明的“行为变化”下的第一个要点是“现在默认启用 D8 脱糖”。如果我不使用 Java8 功能但我使用的是 Kotlin,这种脱糖有什么作用吗?

0 投票
0 回答
206 浏览

android - 启用了 multidex 的 transformDexArchiveWithDexMergerForDebug 错误

我正在尝试构建一个 Android 项目,并在启用 Multidex 时收到此错误

Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':android-simple-host:transformDexArchiveWithDexMergerForDebug'.

这是构建文件:

我做了一个构建扫描,你可以在这里查看(因为项目很大)。

我很困惑为什么在 multiDex 已经启用时会发生这种情况。我最好的猜测是,由于 gradle 依赖链存在某种库冲突,但据我所知,gradle 在默认情况下构建时会删除重复的依赖项,不是吗?

任何帮助,将不胜感激!

编辑:在 gradle.properties 中禁用 Android D8 使构建能够编译,但这不是一个长期的解决方案。但是,稍微缩小了问题范围!(但仍然很混乱)

0 投票
0 回答
730 浏览

android - 如何调试 D8 错误,例如“类型 X 被引用为 Y 的接口”?

现在我有一个项目,它有 3 个模块,一个app模块和一个streaming使用自己的模块的base模块。

当我构建这个项目时,它总是失败app:transformClassesWithDexBuilderForDev2Debug,而且总是这样:

AbortException: Type com.google.android.gms.internal.measurements.zz<something> is referenced as an interface from com.google.android.gms.internal.measurements.zz<something else>

app的模块的 gradle 如下所示:

streaming模块的 gradle 文件如下所示:

大多数有关此错误的帖子都可以在此处和 github repos 的问题页面中找到,并且所有帖子都建议com.google在其 gradle 包含代码中排除。这里的问题是我不知道该排除在哪一个,因为我不知道哪个使用com.google.android.gms.internal.measurements.<something>.

编辑:我忘了提到这些帖子中的所有其他解决方案都涉及将所有Firebaseplay-servicesrepos 更新到最新版本。它对我不起作用。

项目级别的androidDependenciesGradle 任务也没有帮助(搜索时我没有点击internal)。

有了这一切,我什至如何开始调试呢?

0 投票
2 回答
1283 浏览

android - 如何在编译期间调试 R8?

在编译 Android 项目期间有什么方法可以调试 R8 吗?

我有一个非常奇怪的错误,随便修复也无济于事