2016-02-05 10 views
6

Używam wtyczki gradu proguard wewnątrz intellij (nie dla projektu Android), określając moje bibliotekarki jako dom Javy, słoiki wejściowe jako jarname.jar i słoiki wyjściowe jako jarname.pro.jar. Mam plik proguard.txt do konfiguracji, z wyjątkiem opcji Main method keep. Proguard wyrzuca następujący błąd:Proguard rzuca wyjątek IOException dla podwójnego wpisu zip, mimo że tylko jeden wpis istnieje

java.io.IOException: Can't write [/Users/user/src/name/build/libs/jarname.pro.jar] (Can't read [/Users/user/src/name/hci/build/libs/jarname.jar] (Duplicate zip entry [c/a/a/a.class == jarname.jar:com/google/gson/ExclusionStrategy.class]))

Zgodnie z tym source from the proguard website mam zduplikowane wpisy w jarname.jar. Ręczne sprawdzanie pliku jarname.jar nie powoduje duplikowania wpisów. Gdzie powinienem to naprawić?

+0

Pozwolę sobie to trochę zawęzić. Czy wtyczka proguard gradle pobiera dane z cokolwiek innego poza moim odniesieniem do -libraryjars i inputjars? – user1982116

+0

Czy znalazłeś jakieś rozwiązanie? Mam ten sam problem. – elhm

Odpowiedz

0

sprawdzić to rozwiązanie/Hack: https://stackoverflow.com/a/39584838/1919549

adaptowany do błędu, to dodać do build.gradle:

import com.android.build.gradle.internal.pipeline.TransformTask 

def deleteDuplicateJniFiles() { 
    def files = fileTree("/Users/user/src/name/hci/build/libs/") { 
     include "**/jarname.jar" 
    } 
    files.each { it.delete() } 
} 

tasks.withType(TransformTask) { pkgTask -> 
    pkgTask.doFirst { deleteDuplicateJniFiles() } 
} 

Uwaga ta komenda faktycznie nie usunąć te słoiki (twój błąd powielanie implikuje zostaną one z powrotem dodane) - spowoduje to tylko blok konfiguracji/wykluczenia. Nie mam pojęcia, dlaczego są uwzględnione, ponieważ w moim projekcie nie były one również duplikowane podczas kontroli aplikacji gradle: dependencies.

Powiązane problemy