Mar*_*tin 8 android android-library java-8 aar
我正在尝试从我的库中构建一个@aar包,用作客户端项目中的依赖项.
在我的库模块中,我正在使用:
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
在达到客户端依赖关系之前,我想要解决代码并使Java 7兼容.这意味着我需要实际提供一个@aar包,其中Lambda函数和所有其他Java 8相关功能已经移植到Java 7字节码.
我面临的问题是在库模块上使用:
apply plugin: 'com.android.library'
Run Code Online (Sandbox Code Playgroud)
没有执行desugaring任务,这意味着字节码包含Java 8相关的导入,如:
java.lang.invoke.LambdaMetafactory
Run Code Online (Sandbox Code Playgroud)
这将迫使我的客户端将他的编译选项更新为JavaVersion.VERSION_1_8,这是我想要避免的事情.
所以作为最后一个问题:'com.android.library'插件执行的desugaring任务是仅在'com.android.application'插件中可用?如果是这种情况,请你帮我提一些关于如何将这一步也包含在库插件中的提示?
“com.android.library”插件不会故意执行脱糖任务,因为 aar 文件包含 .class 文件的存档(相对于 .dex 文件)。因此,这里不应用脱糖(以及去糖化)。
当然,令人误解的是,在库项目中,仍然被迫指定 Java 8 支持选项,尽管它们实际上并不重要(无论如何,只有 javac 步骤,没有脱糖/dexing,以便生成 .aar 文件):
更新:第二个想法 - 我现在确信这是“com.android.library”插件中的一个错误。脱糖仍然会生成 .class 文件,因此如果 gradle.build 配置规定了脱糖步骤,则没有充分理由跳过脱糖步骤,例如:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_7
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |