【发布时间】:2024-04-22 07:10:01
【问题描述】:
我有自定义注释处理器生成工厂类和META-INF/services/factory.interface.class 资源。
库项目中使用注释处理器,所有生成的文件都正确打包到AAR中。
当我在应用程序项目中使用注释处理器并将库添加为依赖项时,APK/META-INF/services/factory.interface.class 中仅存在来自库 META-INF/services/factory.interface.class 的类
经过一番调查,我意识到 android-gradle-plugin-1.5.0(和 2.0.0-alpha3)中的 MergeJavaResourcesTransform 在所有 exploded-aars、jars 和 @987654327 中寻找合并资源@
有没有办法将META-INF 与intermediates/classes 合并(这是创建注释处理器的资源文件的地方)或使注释处理器在sourceFolderJavaResources 中创建文件?
目前我发现的唯一解决方法是在应用程序的构建脚本中添加 CopyTask
android.applicationVariants.all { variant ->
def variantName = variant.name
def variantNameCapitalized = variantName.capitalize()
def copyMetaInf = tasks.create "copyMetaInf$variantNameCapitalized", Copy
copyMetaInf.from project.fileTree(javaCompile.destinationDir)
copyMetaInf.include "META-INF/**"
copyMetaInf.into "build/intermediates/sourceFolderJavaResources/$variantName"
tasks.findByName("transformResourcesWithMergeJavaResFor$variantNameCapitalized").dependsOn copyMetaInf
}
但我不希望强制编译器用户做任何比添加依赖项更多的事情。
【问题讨论】:
标签: android gradle annotations meta-inf