Android – @aar包中的Desugar类

前端之家收集整理的这篇文章主要介绍了Android – @aar包中的Desugar类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试从我的库中构建一个@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'

没有执行desugaring任务,这意味着字节码包含Java 8相关的导入,如:

java.lang.invoke.LambdaMetafactory

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

所以作为最后一个问题:
令人厌恶的任务是由’com.android.library’插件执行还是仅在’com.android.application’插件中可用?如果是这种情况,请你帮我提一下如何将这一步也包含在库插件中?

解决方法

“com.android.library”插件不会故意执行desugaring任务,因为aar文件包含.class文件的存档(与.dex文件相对).所以这里不适用desugaring(以及dexing).

当然,有误导的是,在库项目中,仍然需要指定Java 8支持选项,尽管它们实际上并不重要(为了生成.aar文件,无论如何都将只有javac步骤,没有desugaring / dexing ):

更新:第二个想法 – 我现在确信这是’com.android.library’插件中的一个错误. Desugaring仍然会生成.class文件,所以没有强大的理由可以跳过desugar步骤,如果这是由gradle.build配置规定的,例如:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_7
}
原文链接:https://www.f2er.com/android/318281.html

猜你在找的Android相关文章