Android – @aar包中的Desugar类

Android – @aar包中的Desugar类,第1张

概述我正在尝试从我的库中构建一个@aar包,用作客户端项目中的依赖项. 在我的库模块中,我正在使用: compileOptions{ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8} 在达到客户端依赖关系之前,我想要解决代码并使其与Java 7兼容.这意味着 我正在尝试从我的库中构建一个@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}
总结

以上是内存溢出为你收集整理的Android – @aar包中的Desugar类全部内容,希望文章能够帮你解决Android – @aar包中的Desugar类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1138774.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存