注释处理器生成的资源未打包到APK

时间:2015-12-16 07:28:50

标签: android gradle annotations meta-inf

我有自定义注释处理器生成工厂类和META-INF/services/factory.interface.class资源。

在库项目中使用注释处理器,所有生成的文件都正确打包到AAR中。

当我在应用程序项目中使用注释处理器并将库添加为依赖项时,META-INF/services/factory.interface.class

中只存在库APK/META-INF/services/factory.interface.class中的类

经过一番调查后,我意识到android-gradle-plugin-1.5.0(和2.0.0-alpha3)中的MergeJavaResourcesTransform在所有exploded-aar中寻找合并的资源,{{1} } s和jar

有没有办法合并来自intermediates/sourceFolderJavaResources的{​​{1}}(这是来自注释处理器的资源文件的创建),还是让注释处理器在META-INF创建文件?

到目前为止,我找到的唯一解决方法是在应用程序的buildscript中添加intermediates/classes

sourceFolderJavaResources

但我不强迫编译器库用户除了添加依赖项之外还做更多的事情。

1 个答案:

答案 0 :(得分:1)

似乎问题与META-INF文件夹有关。以下是针对Service Loader and META-INF

报告的错误

顺便说一句,确认solution

  • 右键单击/ src / main(您有/ java和/ res文件夹),
  • 选择新建>文件夹> Java资源文件夹,
  • 点击完成(不要更改文件夹位置),
  • 右键单击new / resources文件夹,
  • 选择新建>目录
  • 输入" META-INF" (没有引号),
  • 右键单击/ resources / META-INF文件夹,
  • 选择新建>目录
  • 输入"服务" (没有引号)
  • 将您需要的任何文件复制到/ resources / META-INF / services

另外,您可能想在SO上查看以下问题:

初步答复:

您可能希望尝试配置library source set resources属性(包含您的META-INF /服务位置),该属性负责:

  

要复制到javaResources中的Java资源   输出目录。

以下是一个例子:

android {
    ...
    sourceSets {
        main {
            resources.srcDirs = ['/src/META_INF_generated']
        }
    }
    ...
}