2017-09-27 2 views
4

J'ai reçu un avertissement ProGuard lorsque je tentais de créer une version de mon projet Android qui empêchait la génération de se terminer correctement.Comment exclure une dépendance de processeur d'annotations de ProGuard

Attention: classe bibliothèque com.google.googlejavaformat.java.filer.FormattingJavaFileObject 1 $ 1 $ ou instruments étend la classe de programmes com.google.common.io.CharSink

Après un peu de creuser et courir gradlew :app:dependencies , J'ai découvert que google-java-format a été inclus car il est utilisé par AutoFactory, qui a été récemment ajouté au projet.

+--- com.google.auto.factory:auto-factory:1.0-beta5 
| +--- com.google.auto:auto-common:0.6 (*) 
| +--- com.google.auto.value:auto-value:1.1 -> 1.3 
| +--- com.google.googlejavaformat:google-java-format:1.1 

AutoFactory n'est inclus dans mon dossier build.gradle comme annotationProcessor, donc je ne comprends pas pourquoi il est encore en cours de traitement par ProGuard.

provided "com.google.auto.factory:auto-factory:1.0-beta5" 
annotationProcessor "com.google.auto.factory:auto-factory:1.0-beta5" 

J'ai essayé d'ajouter un -dontwarn com.google.gooogleformat.** à mon fichier de configuration de ProGuard comprendre que la bibliothèque est utilisée uniquement lors de la génération de code et ne sont pas réellement nécessaires à la libération. Cela n'a eu aucun effet.

J'ai également regardé le online help, mais je ne suis pas clair sur la façon de spécifier cette dépendance comme un fichier -libraryjars comme suggéré.

Comment configurer le fichier de configuration ProGuard de l'application ou son fichier build.gradle pour empêcher ProGuard de s'étouffer dans cette bibliothèque? Si c'est important, j'utilise simplement ProGuard pour supprimer le code inutilisé et ne pas effectuer d'obfuscation.

Répondre

0

Nous avons réexaminé ce problème après la mise à niveau vers Android Studio 3.0 avec le plug-in Gradle pour Android 3.0.0 et Gradle 4.1. Il semble maintenant que l'ajout de ce qui suit à proguard-rules.pro résout le problème:

-dontwarn com.google.googlejavaformat.** 
-dontwarn com.google.common.** 

En regardant ma première question, il semble que nous l'espace de noms probablement une erreur de frappe pour com.google.googlejavaformat lorsque vous essayez d'abord de résoudre ce problème.

1
// Auto factory for Assisted Injection 
annotationProcessor "com.google.auto.factory:auto-factory:${libs.autoFactoryVersion}" 
provided "com.google.auto.factory:auto-factory:${libs.autoFactoryVersion}" 
+0

Cela ne semble pas résoudre le problème. Il est compliqué par le fait que nous avons récemment mis à jour vers Android Studio 3.0 avec le greffon Android 3.0.0 Gradle et Gradle 4.1. –

+0

s'il vous plaît essayer avec fourni. ça marche bien – user1820178

+0

Nous essayions déjà avec "fourni" plutôt que "compiler", mais cela n'a pas fait de différence pour ProGuard. Pour être clair, notre problème n'est pas d'utiliser le processeur d'annotation AutoFactory mais de configurer ProGuard pour qu'il ignore ses dépendances lors de la création de versions de versions. –