Proguard warnings " can't write resource [META-INF / MANIFEST.MF] (en Double zip d'entrée)"

J'utilise IntelliJ et j'exécute Proguard en mode debug mais je n'arrive pas à me débarrasser des avertissements tels que:

ProGuard: [MyApplication] Warning: can't write resource [META-INF/MANIFEST.MF] 
(Duplicate zip entry [android-support-v13.jar:META-INF/MANIFEST.MF])

ce projet comporte deux modules et android-support-v13.jar est utilisé sur deux d'entre eux. J'ai pensé que c'était le problème alors j'ai retiré cette bibliothèque du dossier libs, l'ai ajoutée comme bibliothèque de projet et ai ajouté la dépendance aux deux modules. Cela n'a rien résolu, l'avertissement persiste et je ne comprends pas pourquoi.

I sachez que ces avertissements n'affectent rien, mais une construction propre est une construction heureuse!

35
demandé sur ToolmakerSteve 2013-05-03 15:33:13

5 réponses

peut-être un proguard.cfg' problème. Ne comprennent '-injars'? Si votre projet inclut un autre projet comme bibliothèque, les pots peuvent être traités deux fois. Pourriez-vous poster votre " proguard.cfg'?

extrait de http://proguard.sourceforge.net/index.html#manual/troubleshooting.html :

vos bocaux d'entrée contiennent plusieurs fichiers de ressources avec le même nom. ProGuard continue de copier les fichiers de ressources comme d'habitude, en ignorant tout fichiers avec des noms déjà utilisés. Une fois de plus, l'avertissement peut être un indication d'un problème, donc il est conseillé de retirer la dupliquer. Une façon pratique de le faire est de spécifier les filtres sur le entrée pots. Il n'est pas possible d'éteindre ces avertissements.

OPTION # 1:

comme vous ne pouvez pas poster vos '-injars', Vérifiez s'ils incluent l'un ou l'autre 'android-support-v13.jar " ou la bibliothèque incluse dans votre projet qui lui-même comprend également " android-support-v13.pot'.

en supposant que vous construisez avec Ant inside IntelliJ idée, vous ne devez pas ajouter-injars,- outjars, ou-libraryjars options; le script Ant fait déjà cela pour vous.

OPTION #2:

bien que les Avertissements soient inoffensifs, une construction propre est une construction heureuse, alors essayez:

http://web.archive.org/web/20160206204259/http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf /

et

https://gist.github.com/paulpv/4439012

OPTION #3:

Inclure (!META-INF/MANIFEST.MF) après chaque '-injars " commande

-injars library.jar(!META-INF/MANIFEST.MF)

OPTION #4: Android Proguard Duplicate définition

a corrigé ceci en déplaçant les bibliothèques tierces vers un autre répertoire, mon affaire "lib". Puis a ajouté

-injars lib/jmdns.jar 

au proguard.fichier cfg.

l'OPTION n ° 5: Android - Proguard double zip erreur de saisie

Si votre fichier de configuration Proguard comprend la ligne suivante, supprimez-la:

-injars bin/classes

l'OPTION n ° 6: Android obscurcir application à l'aide de proguard continue d'affaiblir la bibliothèque de pots - ou est-il?

j'ai trouvé un autre moyen de faire sortir Proguard des pots de bibliothèque. demandez à préserver leurs noms de paquets, par exemple:

de la classe javax.** { *; } - garde l'org de classe.** { *; } - gardez classe twitter4j.** { * ;}

OPTION #7:

une solution étrange (suppression du dossier META-INF dans le dossier src) à quelque chose de similaire ici .

45
répondu Alejandro Colorado 2018-08-27 09:15:21

j'ai utilisé packagingOptions avec exclude dans build.gradle , et j'ai les mêmes problèmes avec vous.

vous pouvez le corriger en utilisant ceci.

packagingOptions { 
    pickFirst 'META-INF/services/javax.annotation.processing.Processor'
    pickFirst 'META-INF/DEPENDENCIES.txt'
    pickFirst 'META-INF/DEPENDENCIES'
    pickFirst 'META-INF/LICENSE.txt'
    pickFirst 'META-INF/LICENSE'
    pickFirst 'META-INF/NOTICE.txt'
    pickFirst 'META-INF/NOTICE'
    pickFirst 'META-INF/LGPL2.1'
}

remplacer pickFirst par exclude .

2
répondu Wooseong Kim 2014-07-24 06:53:56

la meilleure solution que j'ai trouvée était de copier la cible-obfuscate de /tools/ant/build.xml dans les custom_rules de votre projet.XML. Alors le seul bloc qui doit être changé est:

<pathconvert property="project.all.classes.value" refid="project.all.classes.path">
    <firstmatchmapper>
         <regexpmapper from='^([^ ]*)( .*)$$' to='""(!META-INF/MANIFEST.MF)'/>
         <identitymapper/>
    </firstmatchmapper>
</pathconvert>

le seul bit ajouté est (!META-INF/MANIFEST.MF) . Cela exclura tous les fichiers de manifestes, qui ne seront pas copiés dans L'APK finale de toute façon.

0
répondu user1499147 2013-11-20 10:34:58

ne référencez pas la bibliothèque de support en incluant directement son jar; lorsque vous faites cela, le système de construction ne peut pas désambiguer entre plusieurs versions de celui-ci, et vous obtenez des erreurs de ce type. L'inclure en faisant référence à ses coordonnées Maven:

dépendances { compiler 'com.Android.support: support-v13: X. X. X' } où X. X. X est le bon numéro de version basé sur l'API contre laquelle vous compilez. Si vous incluez cette dépendance via L'assurance-chômage à la Structure du projet > (votre module) > dépendances > + bouton > dépendance de la Bibliothèque il vous aidera à choisir le bon numéro de version.

vous pouvez également trouver commode d'inclure d'autres dépendances via des coordonnées Maven au lieu de disputer leurs jarres; cette même interface de dépendance de bibliothèque a une fonction de recherche pour vous aider à trouver des bibliothèques.

assurez-vous de supprimer cette bibliothèque des fichiers ou de tout autre dossier qu'elle était présente à l'intérieur de

0
répondu Varun Bhatia 2016-01-09 10:03:57

ajouter -dontwarn à proguard.cfg d'ignorer les avertissements

-4
répondu Yunfei Tang 2014-06-14 12:01:35