У меня есть пользовательский процессор аннотаций, генерирующий классы factory и ресурс META-INF/services/factory.interface.class
.
Обработчик аннотации используется в проекте библиотеки, и все сгенерированные файлы правильно упакованы в AAR.
Когда я использую обработчик аннотации в проекте приложения с библиотекой, добавленной как зависимость, только классы из библиотек META-INF/services/factory.interface.class
существуют в APK/META-INF/services/factory.interface.class
После некоторого исследования я понял, что MergeJavaResourcesTransform
в android- gradle -plugin-1.5.0 (и 2.0.0-alpha3) ищет ресурсы для слияния во всех exploded-aar
s, jar
s и intermediates/sourceFolderJavaResources
Есть ли способ слить META-INF
из intermediates/classes
(где создаются файлы ресурсов из обработчика аннотаций) или сделать обработчик аннотации создать файл в sourceFolderJavaResources
?
Обходной путь, который я нашел до сих пор, заключается в том, чтобы добавить CopyTask
в application buildscript
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
}
Но я не хочу, чтобы заставить компилятор пользователей библиотеки делать что-то большее, чем добавлять зависимости.