问题标签 [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.
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(模拟器)。
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()
。
如果我添加一个Optional
in AndroidAppIoHandler
,像这样:
然后我看到:
从 的第一行调用launch()
。
如果我将 to 添加Optional
到launch()
方法的下一行,如下所示:
然后我看到:
在相同的执行中,在打印上面的其他消息之后!
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 错误吗?
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。
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
android - 脱糖时如何获取第三方依赖项使用的类/接口?
所以我有这个特定的警告,我使用了脱糖并且这个警告出现了。我的第三方依赖项之一使用它Bifunction
,但由于找不到它,应用程序崩溃。我发现可能脱糖没有Bifunction
类,所以jackson
不能转换它。我必须说它只会在 Android-API 23 marshmallow 上出错,并且在 Android-API >23 设备上运行良好。
编辑如果我将 desugaring 设置为 true 或 false,则会发生此问题,因此我确定Bifunction
从java.util.function
.
代码:
当我尝试在启用 Desugaring 的情况下构建应用程序时出现警告:
这是崩溃日志,当我尝试将我的 mapList 映射到另一个列表 (List) 时出现。
[编辑] 这里是 build.gradle:
这是另一个:
runtimeexception - d8 dex 编译因脱糖而失败
我无法让 d8 dex 编译器编译我的 jar 包:
我试图阅读有关脱糖问题的信息,但没有走得太远——这个罐子有什么问题?
android - Desugaring - Java 8 Stream API 与 Proguard 在发布版本中崩溃
该应用程序仅在其带有脱糖 Java 8 for Android的发布版本中崩溃。
这是我们尝试过但没有奏效的方法。
示例代码只是使用过滤器
错误:
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 并且错误仍然存在。
build.gradle - 使用带有 minSdkVersion 21 的 desugar 时强制启用 multidex
在启用 desugar 编译我的项目时,我收到错误In order to use core library desugaring, please enable multidex.
但在编写的文档中,multidex 应该仅启用minSdkVersion 20
或更低。在我的应用程序配置下方:
为什么我收到这个错误,我应该怎么做才能解决这个问题?(启用 multidex 对我来说不是选项,我不想只为此而使应用程序变大)