问题标签 [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.
android - D8:找不到类型“sun.misc.Unsafe”
在我的 android 项目中启用 D8 后,我开始看到这些警告:
.
项目成功构建,但在运行时,我看到这些错误日志,因此,应用程序功能受到影响。
经过一段时间的搜索,我无法找到任何有用的东西。请帮忙。
是的,如果 D8 被禁用并且其他一切保持不变,我在运行时不会遇到此错误。
java - r8.jar 位于 Android SDK 的什么位置?
我正在试用 Android 的D8 和 R8。
正如文档所说,运行 D8 的命令如下:
对于 R8:
我找到了d8.jar
里面%ANDROID_HOME%\build-tools\28.0.3\lib
,但我找不到r8.jar
。
r8.jar
Android SDK 位于何处?
android - 如何知道罐子何时需要脱糖(对于 d8.bat)
如何知道罐子何时需要脱糖?因为d8.bat
有一个参数--no-desugaring,我想知道什么时候可以使用它
--no-desugaring:禁用 Java 8 语言功能。仅当您不打算编译使用 Java 8 语言功能的 Java 字节码时才使用此标志。
java - D8 dexer 引入后,android 中目前使用哪个编译器将Java 编译成.class 文件?
在不推荐使用 Jack 编译器并引入了 D8 后,java -> .class 文件部分再次被分离(与 jack 发生在一个步骤中不同),Oracle Java SEjavac
编译器是否再次用于编译?
android - 如何将标志传递给 D8 工具?
D8是 Android Studio 和 Android Gradle 插件用来将项目的 Java 字节码编译成 DEX 字节码的命令行工具。该命令有几个选项:
--output path , --file-per-class , --no-desugaring , --main -dex-list等。
我有几个问题:
- 如何将此标志从 gradle 构建文件传递给 d8?
- 如何查看 Android Studio 在构建 apk 时实际使用的完整 d8 命令(带有所有标志)。
我已经尝试将DexOptions 命令与additionalParameters
属性一起使用。
但它似乎不起作用。
在D8工具之前有DX工具。参数可以像这样发送到 DX:
但现在这不起作用。可能是因为现在D8
dexing 任务名称不以dex
单词开头。
我还注意到有android.enableD8.desugaring=true
可以在gradle.properties
文件中声明的属性。我假设这个属性打开了--no-desugaring标志D8
。
如果是这样,也许其他属性也可以通过gradle.properties
文件设置?是否有所有可用android.enableD8.*
属性的文档?
更新:
multiDexKeepFile
每个 BuildType 块中都有可以声明的属性。看起来这个属性与D8的 --main-dex-list标志完全一样。好的,但是其他标志呢?
android - 如何将 D8 行为恢复到 Android Studio 3.1.x 中的行为?
对于 Google 的 Android (Studio) 开发人员支持团队来说,这确实是一个问题。如果有更好的渠道,请告诉我。
背景
我注意到我的应用在 Google Play 控制台中报告了越来越多的 libart.so 崩溃。同样的崩溃不会出现在 Crashlytics 中,我自己也无法重现它们,而且它们似乎只影响了几十个用户。我没有包括这些崩溃的任何细节,因为我认为这与我的问题无关,但我愿意接受其他方面的说服。
我发现了少量关于类似问题的报告,例如this和this。这些给我的印象是根本原因可能是 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,这种脱糖有什么作用吗?
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 使构建能够编译,但这不是一个长期的解决方案。但是,稍微缩小了问题范围!(但仍然很混乱)
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>
.
编辑:我忘了提到这些帖子中的所有其他解决方案都涉及将所有Firebase
和play-services
repos 更新到最新版本。它对我不起作用。
项目级别的androidDependencies
Gradle 任务也没有帮助(搜索时我没有点击internal
)。
有了这一切,我什至如何开始调试呢?
android - 如何在编译期间调试 R8?
在编译 Android 项目期间有什么方法可以调试 R8 吗?
我有一个非常奇怪的错误,随便修复也无济于事