【问题标题】:Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?Android + coreLibraryDesugaring:我可以期望哪些 Java 11 API 可以工作?
【发布时间】:2021-03-10 00:46:44
【问题描述】:

我正在尝试将一些 Java 库从“普通”JVM 迁移到 android,并坚持使用代码中使用的一些 Java11 API。

我已经得到的第一件事 - Java11 语言功能似乎只适用于 Android Studio 的 Canary 版本,请参阅答案 here

现在我需要了解哪些 API 可以真正使用。这里有两个对我不起作用的用例,如果我做错了什么或者它永远不应该起作用,我就无法理解:

  1. List.copyOf() - 在 Java11 中引入,方法 copyOf 在 android 上不可用。 Java 9 引入的方法“List.of()”工作正常。

  2. java.lang.invoke.LambdaMetafactory 类 - 随 Java 1.8 引入 - 用于以编程方式创建 lambda 以供使用而非反射,在 Android 上不可见。

我在desugar_jdk_libs 的来源中看到了它们:

所以 - 问题是:我如何确定某些 Java API 是否应该在“脱糖”android 构建中可用? 'desugaring' 真正可以期待什么?

重现步骤:

  1. 使用Android Studio Canary 生成一个虚拟的“基本活动”项目
  2. 确保在build.gradle 中提供以下内容
android {
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
}
dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}
  1. 在代码中的某处添加以下行
        List<Integer> ints1 = List.of(1, 2, 3);
        Supplier<List<Object>> listSupplier = () -> new ArrayList<>();
        List<Object> alist = listSupplier.get();

        List<Integer> ints2 = List.copyOf(ints1);
        LambdaMetafactory.metafactory(null,null,null,null,null,null);

最后两行无法为我编译。

PS:最终应用程序应该可以在 Android 10+ 上运行。

【问题讨论】:

  • 我认为这还不可能。主要是因为工作正在进行中。将来,我们将提供支持的 API 和 lint 规则列表(如 java 8 developer.android.com/studio/write/java8-support-table
  • 我的问题是,当我们现在支持 Java 11 时,我们还需要 coreLibraryDesugaringEnabled 吗?!

标签: android java-11


【解决方案1】:

Desugaring lib 被认为是非官方的。我们不能期待一个确切的答案。当它准备好时,我们会得到它。现在 List.copyOf() 方法现在适用于最新的 Gradle 版本。

关于LambdaMetafactory类,它不包含在Android Javadoc中。这意味着我们假设我们根本没有LambdaMetafactory。 Google 剥离了一些 Java API,因为它是轻量级的。

一般来说,我们应该先检查android Javadoc。如果 android Javadoc 没有提及某些 API。我们可以肯定,我们不会很快获得该功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 2017-08-19
    • 2011-11-14
    • 2018-09-30
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多