2017-03-25 7 views
1

Ich habe ein Multi-Modul-Android-Anwendung und wenn ich die Freigabe APK bauen, bekomme ich diese dex Fehler:Wie package-info.java Dateien von Dex ausschließen?

java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/XX/package-info; 

ich natürlich tun haben package-info Datei in alle meine Module, und sie alle haben den gleichen Namen .
Warum interessiert sich dex überhaupt für package-info Dateien, und wie kann ich es konfigurieren, um sie zu ignorieren?

Hinweis: Ich mache NICHT mit der Verwendung von packagingOptions innerhalb von Android-Tag in build.gradle für App-Modul Multi-dex

+0

Was sind die Gründe für das gleiche Paket in mehreren Modulen? Wäre es sinnvoller, einzelne (Sub-) Pakete über Module hinweg zu erstellen? –

+0

in einer geschichteten Architektur haben Sie das gleiche Paket in verschiedenen Modulen und somit können Sie Paket-Sichtbarkeit für die Zugriffssteuerung verwenden. – TmTron

Antwort

0

Die Lösung besteht darin, die package-info Dateien aus den JAR-Dateien auszuschließen.

jar { 
    exclude('com/**/package-info.*') 
} 

für android-Module:

Beispielcode in build.gradle Dateien

für Java-Module verwenden

android { 
    sourceSets.main.java.filter.exclude 'com/**/package-info.*' 
} 

Arbeiten mit:

  • Android Studio 3.0 Canary 5
  • Gradle 4.1-milestone-1
  • Android gradle Plugin: 3.0.0-alpha5

Hinweis: Sie können natürlich dann schließen Sie die package-info Dateien, wenn sie nicht zu Ihren Build beitragen!
z.B. Wenn Sie immutables style-configuration in Ihrer package-info Datei verwenden, können Sie die Dateien nicht aus dem Build ausschließen, da sich dann die Namen der generierten Dateien ändern können!

0

Versuchen Sie aktivieren möchten.

packagingOptions { 
exclude 'META-INF/DEPENDENCIES.txt' 
exclude 'META-INF/DEPENDENCIES' 
exclude 'META-INF/dependencies.txt' 
exclude 'META-INF/LICENSE.txt' 
exclude 'META-INF/LICENSE' 
exclude 'META-INF/license.txt' 
exclude 'META-INF/LGPL2.1' 
exclude 'META-INF/NOTICE.txt' 
exclude 'META-INF/NOTICE' 
exclude 'META-INF/notice.txt' 
} 

Mehr: Packaging1 | Packaging2

+0

'exclude' scheint nicht für' package-info' Dateien zu funktionieren - vielleicht weil sie Java-Quelldateien sind? – TmTron

Verwandte Themen