我有自定义注释处理器生成工厂类和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
应用程序的构建脚本
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
}
但是我不希望强制编译器库用户做任何比添加依赖项更多的事情。