In build Android Gradle, non è consentito includere lo stesso file con lo stesso percorso più di una volta nell'output. Nella tua build, c'erano due file META-INF/DEPENDENCIES
provenienti da luoghi diversi. Dal momento che non hai affatto bisogno di questo file nella tua applicazione, la cosa più semplice da fare è dire al sistema di build di ignorarlo del tutto, che è ciò che fa questa direttiva exclude
.
C'è anche una direttiva pickFirst
per comunicare al sistema di generazione di conservare uno delle copie; c'è una piccola quantità di dettagli su questo in Android Gradle plugin 0.7.0: "duplicate files during packaging of APK".
Le build di Android in Gradle sono piuttosto rigide riguardo ai file duplicati, che possono rendere la vita difficile. C'è un problema simile se si include la stessa classe Java più di una volta, in cui si ottiene l'errore "Definisci file multipli dex" (vedere Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat) per un esempio tipico).
Altri sistemi di costruzione sono più indulgenti. È tipico di Java che, se si include la stessa classe più di una volta in un classpath, ad esempio, la prima copia che vede è quella che viene utilizzata; i duplicati successivi vengono ignorati. Questo è in molti casi più facile da gestire, ma ha un paio di problemi. Il più grande è che ci possono essere errori sottili se più versioni differenti di un file si insinuano nella build senza che tu lo sappia - può essere difficile capire cosa sta succedendo. Quando lo capisci, di solito puoi risolverlo manipolando l'ordine in cui sono incluse le cose per assicurarti che quello che vuoi arrivi all'output finale, ma in build molto complesse, questo può essere difficile da raggiungere, e può succedere che fare cose apparentemente non correlate come includere nuove librerie nel tuo progetto possa stravolgere l'ordine e portare a molti guai.
Per questo motivo, Gradle ha la filosofia di non affidarsi all'ordinamento delle cose per determinare i "vincitori" nel gioco della risoluzione dei duplicati e costringe lo sviluppatore a rendere esplicite tutte le dipendenze. L'implementazione di Android del suo sistema di costruzione su Gradle segue quella filosofia.
fonte
2015-01-16 17:34:25
Ho appena aggiornato Android Studio 2.2 e ho ricevuto questo errore. È stato corretto cambiando "META-INF/DEPENDENCIES.txt" in "META-INF/DEPENDENCIES". –
Lo stesso per me dopo Android Studio 2.2 ma invece con "META-INF/LICENCE" – aez
Quando aggiungo questa linea, si blocca solo per l'eternità durante la creazione del progetto? – Dan