2015-10-05 17 views
12

Ho un progetto che utilizza il plug-in gradle sperimentale, ovvero 0.2.0. Quando non ho il productFlavor, posso perfettamente integrare un modulo di libreria in Android Studio e tutto funziona perfettamente. Ma quando la libreria ha un productFlavor, il progetto principale I non trova le classi della libreria.Aggiungi productFlavor alla libreria di plug-in gradle Android sperimentale

Questo fix non sembra funzionare con il plugin gradle sperimentale. Qualcuno ha idea di come funzionano gli aromi con il nuovo plugin?

libreria:

android.productFlavor { 
    create ('flavor') { 
     ... 
    } 
} 

Progetto:

... 

dependencies { 
    compile project(':mylibrary') 
} 

risposta

0

La sintassi è sbagliata.

Con il plugin sperimentale (0.2.1) sapori sono definiscono di fuori del blocco android e la sintassi corretta è android.productFlavors

model { 
    android { 

    } 

    android.productFlavors { 
     create("flavor") { 

     } 
    } 
} 
+0

Questo non funziona. – dragostis

+0

Questo esempio funziona per te in "0.2.1'? Con la sintassi corretta, ovviamente. 'android.productFlavors' nella libreria e' compile project (': mylibrary') 'nel progetto principale. – dragostis

+0

La sintassi è corretta e funziona correttamente con un modulo dell'applicazione. Non so come possa funzionare con una biblioteca. Secondo me dovresti spostare l'aroma nel modulo principale (non ho mai visto sapori all'interno di una libreria) –

9

Questo potrebbe aiutare?

Biblioteca pubblicazione

Per impostazione predefinita una biblioteca pubblica solo la sua variante di rilascio. Questa variante verrà utilizzata da tutti i progetti che fanno riferimento alla libreria, indipendentemente dalla variante da loro stessi creata. Questa è una limitazione temporanea dovuta alle limitazioni di gradazione che stiamo lavorando per la rimozione.

È possibile controllare quale variante viene pubblicato con

android { defaultPublishConfig "debug" } 

Si noti che questo nome di configurazione pubblicazione fa riferimento al nome completo variante. Il rilascio e il debug sono applicabili solo quando non ci sono aromi . Se si voleva cambiare la variante pubblicato predefinita mentre utilizzando sapori, si scrive:

android {defaultPublishConfig "flavor1Debug" } 

E 'anche possibile pubblicare tutte le varianti di una biblioteca. Siamo che pianifica di consentire questo mentre si utilizza una normale dipendenza da progetto a progetto (come mostrato sopra), ma questo non è possibile in questo momento a causa di alle limitazioni in Gradle (stiamo lavorando per risolvere anche quelle). La pubblicazione di tutte le varianti non è abilitata per impostazione predefinita. Per consentire loro:

android {publishNonDefault true } 

E 'importante rendersi conto che la pubblicazione di molteplici varianti significa editrici più file AAR, invece di un singolo AAR contenente molteplici varianti. Ogni confezione di aar contiene un'unica variante. Pubblicare una variante significa renderlo disponibile come output artefatto del progetto Gradle. Può quindi essere utilizzato sia quando si pubblica su un repository di Maven, o quando un altro progetto crea una dipendenza sul progetto di libreria..

Gradle ha un concetto di inadempienza artefatto" Questo è quello che è usato quando si scrive:

compile project(':libraries:lib2') 

Per creare una dipendenza da un altro artefatto pubblicato, è necessario specificare quale usare:

dependencies { 
    flavor1Compile project(path: ':lib1', configuration: 'flavor1Release') 
    flavor2Compile project(path: ':lib1', configuration: 'flavor2Release') 
} 

. Importante: si noti che la configurazione pubblicato è una variante completa, tra cui il tipo di generazione, e deve essere fatto riferimento come tale Imp ortant: abilitando la pubblicazione di non default, il plugin di pubblicazione Maven pubblicherà queste varianti aggiuntive come pacchetti extra (con classificatore). Ciò significa che non è realmente compatibile con la pubblicazione su un repository di Maven. . È necessario o pubblicare una singola variante in un repository OPPURE abilitare la pubblicazione di tutte le config per le dipendenze tra progetti.

Da qui: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

+0

Ho già provato [questo] (http://stackoverflow.com/questions/24860659/multi-flavor-app-based-on-multi-flavor-library-in-android-gradle). – dragostis

0

Le cose sono un po 'più complessa. ho testato su Gradle sperimentale 0.8.0

sulla libreria è necessario:

model{ 
    android { 
    ... 
    publishNonDefault true 

    productFlavors { 
       create("flavor1") { 
       } 
       create("flavor2") { 
       } 
      } 
    } 
} 

su App è necessario:

model { 
    android { 
    ... 
    publishNonDefault true 

    productFlavors { 
       create("flavor1") { 
       } 
       create("flavor2") { 
       } 
      } 
    } 
} 
//after the model is closed !! 
configurations { 
    flavor1DebugCompile 
    flavor1ReleaseCompile 

    flavor2DebugCompile 
    flavor2ReleaseCompile 
} 

dependencies { 
... 
flavor1DebugCompile project(path: ':mylibrary', configuration: 'flavor1Debug') 

flavor1ReleaseCompile project(path: ':mylibrary', configuration: 'flavor1Release') 

flavor2DebugCompile project(path: ':mylibrary', configuration: 'flavor2Debug') 

flavor2ReleaseCompile project(path: ':mylibrary', configuration: 'flavor2Release') 

    } 

si spera, se si esegue piena assemblare si vuole prendi 2 apk, uno per ogni sapore. Ho usato "./gradlew build" da un cmd e li ho ottenuti. nota che per la tua liberai riceverai un AAR per ogni gusto

Problemi correlati