问题标签 [jdk-desugaring]

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 投票
0 回答
365 浏览

java - 调用需要 API 级别 26,同时使用 Java 8+ API 脱糖支持

我正在使用 minSdk 23测试Java 8+ API 脱糖支持。

java.time例如,当我使用该库时val instant = Instant.now(),我收到以下错误:

调用需要 API 级别 26(当前最低为 23):java.time.Instant#now

代码编译并正确执行。

我可以假设它适用于所有设备吗?

编辑:我尝试过使用 API 29(物理设备)和 API 23(模拟器)。

0 投票
4 回答
3008 浏览

android - Android Gradle Build Plugin 4.0.0 & R8 Desugaring 不适用于 API 19

我正在将 Android 应用程序从使用 Proguard 的脱糖切换到 Android Gradle Build Plugin 4.0.0 中可用的新 R8 脱糖。

我已按照官方文档中详述的步骤启用 Java 8 库脱糖:

gradle.properties

应用程序构建.gradle

您可以看到我们至少支持 API 19。没有构建错误(使用 Gradle 6.1.1),但有以下警告:

当我运行应用程序并在代码中使用以下 Optional 启动活动时,应用程序崩溃

ApplicationBase.java

我错过了什么?


在阅读了@sgjesse 的答案后,似乎发现了该launch()方法的问题,我们做了一些进一步的调查。我可以确认MultiDex.install()之前被调用过launch()

如果我添加一个Optionalin AndroidAppIoHandler,像这样:

然后我看到:

从 的第一行调用launch()

如果我将 to 添加Optionallaunch()方法的下一行,如下所示:

然后我看到:

在相同的执行中,在打印上面的其他消息之后!

0 投票
0 回答
149 浏览

android - 为什么即使在为 Java 8 支持添加了脱糖功能后,Android Studio Lint 仍会在日期函数上报告“在旧版本上调用新方法”?

我安装了最新的 AS 4.01,并使用 coreLibraryDesugaring (1.0.10) 为 Java 8 支持设置了最新的依赖项,并在我的 build.gradle 文件中使用了正确的 compileOptions。以下代码在使用 API 23 的设备上编译并运行,没有错误:

但是,lint 将其中许多行标记为“需要 API 级别 26(当前最小值为 21)”

我认为在脱糖到位的情况下,它应该允许这样做吗?这是一个 lint 错误吗?

0 投票
0 回答
132 浏览

android - Android coreLibraryDesugaringEnabled,使用 NoSuchMethodError 连接测试崩溃

我添加coreLibraryDesugaringEnabled到我们的应用程序中,它适用于正常的应用程序运行。

但是,当我运行连接测试时,它会崩溃,并且类上没有此类方法错误Stream

我发现了一些模糊的参考,这可能是因为在调用Multidex.install? 我首先将该类引用为静态初始化程序,因此很早就可以访问它。不确定这是否是一个红鲱鱼,但我想我会提到它。

如果它有助于测试运行AndroidJUnit4ClassRunner

编辑:我发现了一个模糊的参考,只有一篇文章指出这在仪器测试中不受支持:

请注意,在 Android Studio 4.0 中,不支持在检测测试中使用这些库脱糖类型。

https://medium.com/androiddevelopers/support-for-newer-java-language-apis-bca79fc8ef65

但即使是来自谷歌的嵌入视频也没有说明这一点。也不确定 AS 版本与它有什么关系。也许他们的意思是AGP。

0 投票
1 回答
3139 浏览

android - 无法解析外部依赖项 com.android.tools:desugar_jdk_libs:1.0.9 因为没有定义存储库

我正在使用 Android Studio 4.1.2 版。我的项目运行良好。我将其更新为 Android Studio 4.1.3。我仍然在重新安装 AS 4.1.2 时遇到错误。我开始收到以下错误:

在终端中运行以下命令:

这是堆栈跟踪:

build.gradle 文件:axnetwork-library Annexandroid app

附件安卓(build.gradle)

axnetwork-lib build.gradle

应用程序构建.gradle

0 投票
1 回答
268 浏览

android - 脱糖时如何获取第三方依赖项使用的类/接口?

所以我有这个特定的警告,我使用了脱糖并且这个警告出现了。我的第三方依赖项之一使用它Bifunction,但由于找不到它,应用程序崩溃。我发现可能脱糖没有Bifunction类,所以jackson不能转换它。我必须说它只会在 Android-API 23 marshmallow 上出错,并且在 Android-API >23 设备上运行良好。

编辑如果我将 desugaring 设置为 true 或 false,则会发生此问题,因此我确定Bifunctionjava.util.function.

代码:

当我尝试在启用 Desugaring 的情况下构建应用程序时出现警告:

这是崩溃日志,当我尝试将我的 mapList 映射到另一个列表 (List) 时出现。

[编辑] 这里是 build.gradle:

这是另一个:

0 投票
1 回答
121 浏览

runtimeexception - d8 dex 编译因脱糖而失败

我无法让 d8 dex 编译器编译我的 jar 包:

我试图阅读有关脱糖问题的信息,但没有走得太远——这个罐子有什么问题?

0 投票
0 回答
370 浏览

android - Desugaring - Java 8 Stream API 与 Proguard 在发布版本中崩溃

该应用程序仅在其带有脱糖 Java 8 for Android的发布版本中崩溃。

这是我们尝试过但没有奏效的方法。

示例代码只是使用过滤器

错误:

0 投票
0 回答
86 浏览

android - 为 B4A 生成脱糖库

我正在为 B4A 框架制作一个 Android 库。情况
如下:

  • 我的 Android 库使用 Java8 功能(例如 Lambda)
  • B4A (Basic4Android) 使用 legacy dex(而不是d8)来制作应用程序,因此与 java8 不兼容,并且不会自行脱糖。

在 B4A 中使用我的aar文件会导致以下错误:

官方论坛的解决方案是使用Bazel 的 desugar tool对库的 Jar 进行脱糖,但似乎它导致Expected a load for ...了不同的错误,而不是我的问题。

我的问题:
对于这些情况,是否可以使用 Android Studio 生成脱糖aar库(与 Java7 兼容且无 lambda)?

我知道d8会脱糖,但它的输出是.dex文件而不是.jar文件。

我尝试过的:
Android 的Using Java 8 Feature中所说的解决方案没有帮助,因为它不会产生兼容的 jar 并且错误仍然存​​在。

0 投票
0 回答
89 浏览

build.gradle - 使用带有 minSdkVersion 21 的 desugar 时强制启用 multidex

在启用 desugar 编译我的项目时,我收到错误In order to use core library desugaring, please enable multidex.编写的文档中,multidex 应该仅启用minSdkVersion 20或更低。在我的应用程序配置下方:

为什么我收到这个错误,我应该怎么做才能解决这个问题?(启用 multidex 对我来说不是选项,我不想只为此而使应用程序变大)