gpt4 book ai didi

Android - 将@aar 包中的类脱糖

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:19 24 4
gpt4 key购买 nike

我正在尝试从我的库构建一个@aar 包,以用作客户端项目中的依赖项。

在我使用的库模块中:

compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

我想在达到客户端依赖性之前对代码进行脱糖并使其与 Java 7 兼容。这意味着我实际上需要提供一个 @aar 包,其中 Lambda 函数和所有其他 Java 8 相关功能已经移植到 Java 7 字节码。

我面临的问题是在库模块上使用:

apply plugin: 'com.android.library'

不执行脱糖任务,这意味着字节码包含 Java 8 相关的导入,例如:

java.lang.invoke.LambdaMetafactory

这将迫使我的客户也将他的编译选项更新为 JavaVersion.VERSION_1_8,这是我想避免的事情。

最后一个问题:脱糖任务是由“com.android.library”插件执行的还是仅在“com.android.application”插件中可用?如果是这种情况,您能帮我一些提示,告诉我如何将此步骤也包含到库插件中吗?

最佳答案

脱糖任务不是由“com.android.library”插件故意执行的,因为 aar 文件包含 .class 文件的存档(相对于 .dex 文件)。因此此处不应用脱糖(以及去糖化)。

当然,令人误解的是,在库项目中,人们仍然被迫指定 Java 8 支持选项,尽管它们实际上无关紧要(无论如何只有 javac 步骤,没有 desugaring/dexing,以便生成.aar 文件):

enter image description here

更新:再三考虑 - 我现在确信这“com.android.library”插件中的错误。脱糖仍然会产生 .class 文件,因此如果 gradle.build 配置规定,则没有充分的理由跳过脱糖步骤,例如:

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_7
}

关于Android - 将@aar 包中的类脱糖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48099802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com