2015-12-16 30 views
15

için paketlenmemiş kaynakları oluşturdu Fabrika sınıfları ve META-INF/services/factory.interface.class kaynağını üreten özel ek açıklama işlemci kullanıyorum.Ek Açıklama İşlemciler, APK

Kitaplık projesinde ek açıklama işlemci kullanılır ve oluşturulan tüm dosyalar AAR'ye doğru şekilde paketlenir.

kütüphanenin ile uygulama projesinde açıklama işlemci kullanımı kütüphaneler META-INF/services/factory.interface.class sadece sınıfları bir fark bir araştırmadan sonra APK/META-INF/services/factory.interface.class

mevcut bir bağımlılık olarak ilave robot-gradle-eklentisi-1.5.0 içinde MergeJavaResourcesTransform (ve 2.0 olduğu 0,0-alpha3) tüm exploded-aar s, jar s birleştirilmesi için kaynaklar arar ve

intermediates/sourceFolderJavaResourcesintermediates/classes dan META-INF (ek açıklama işlemcisinden kaynak dosyaları oluşturulur olsun nerede var) birleştirmek veya ek açıklama işlemci dosyası oluşturmak yapmak için herhangi bir yolu var mı içinde sourceFolderJavaResources?

Sadece ben bugüne kadar bulunmuş uygulamanın 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 
} 

yılında CopyTask eklemektir Ama bir kütüphane kullanıcılarının bağımlılıkları eklemekten daha fazla bir şey yaparsınız derleyici zorlamak wat yok ettik Geçici çözüm.

cevap

1

Sorun, META-INF klasörü ile ilgili gibi görünüyor.Böcekçi arada Service Loader and META-INF

için bildirilen, orada bir solution doğruladı:

  • sağ/src /, (siz/java ve/res klasörleri var olduğu) ana
  • seçme tıklayın
  • sağ yeni/kaynaklar klasörüne tıklayın
  • yeni> Klasör> Java Kaynakları Klasör,
  • tıklama Finish (Klasör Konumu değişmez),
  • Yeni'yi seçin> Dizin
  • Yeni> Directory seçmek
  • kopyasını (tırnaklar olmadan) "hizmetlerini" girin (tırnaklar olmadan) "META-INF",
  • sağ/kaynaklar/META-INF klasörünü tıklayın girmek Eğer/kaynaklar/META-INF içine gereken herhangi bir dosya/hizmet Ayrıca

, SO aşağıdaki soruları kontrol etmek isteyebilirsiniz:


META-INF/services in JAR with Gradle
  • Using serviceloader on android

    İlk Cevap:

    Sen yapılandırmak denemek isteyebilirsiniz sizin library source set 'ın sorumludur (sizin konumu/hizmet META-INF ile) resources nitelik :

    Java kaynaklarına kopyalanacak olan javaResources çıkış dizini. İşte

    bir örnek:

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

    Kütüphane META-INF doğru AAR için paketlenir, uygulamada MET-INF dosyaları ile bir sorun vardır. 'resources.srcDirs 'aracıları/sınıfları/debug/META-INF' işlevi eklenmiyor – skyman

    +0

    @skyman Ekstra ayrıntılarla güncellendi. Sorun için bazı geçici çözümler var. Umarım yardımcı olur. – GregoryK

    +1

    Yapı sistemi ile çalışmaz. META-INF, hem kütüphanede hem de uygulamada derlenerek, yani apter derlemesiyle başa çıkarken, paketlemeden önce – skyman