ファクトリ クラスと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
}
しかし、ライブラリのユーザーが依存関係を追加する以上のことをコンパイラに強制するつもりはありません。