46 votes

Android studio 3.1 Avertissement : La règle `-keep public class *extends java.lang.annotation.Annotation {

J'ai récemment mis à jour Android studio mais je ne parviens pas à trouver la source du problème suivant signalé dans Android studio 3.1 :

Warning: The rule `-keep public class *extends java.lang.annotation.Annotation {

enter image description here

enter image description here

l'avertissement semble être coupé peut-être et il manque des informations. mais il semble que ce soit un problème de proguard bien que j'obtienne cet avertissement lors de la construction de la variante de débogage. j'ai vérifié mes fichiers proguard et je n'ai pas de ligne qui corresponde exactement à cela. j'ai cherché dans tout le projet. des idées sur la cause fondamentale ?

1 votes

Je suis confronté au même problème ici, je suppose que c'est un nouveau code "cassé" de la bibliothèque tierce. Je viens de mettre à jour quelques librairies ici, donc je n'ai pas la moindre idée de la librairie qui fait des siennes. Je suis d'accord avec Moonbloom, quelqu'un a oublié d'ajouter un espace après "extends", mais ce n'est pas votre faute ;)

0 votes

JFYI Je viens de mettre à jour Android.suport, facebook.sdk, retrofit et picasso - et ce problème est apparu.

4 votes

C'est un bug dans le plugin Android gradle issuetracker.google.com/issues/72080964

23voto

Aba Points 672

Comme mentionné dans les commentaires de la question par @arcone1, @Vincent Mattana et confirmé par @random, le problème est résolu dans Android Studio 3.2.

De la problème dans Google Issue Tracker :

Pour clarifier, il s'agit d'un avertissement, et non d'une erreur, de R8, que nous utilisons pour calculer la liste des classes pour le dex principal, dans la variante multidex héritée. Il n'affecte pas la sortie, et ne devrait pas causer d'échec de construction ou d'exécution.
Je travaille sur un correctif pour changer cette règle de conservation en "-keep public class * implements java.lang.annotation.Annotation", qui est sémantiquement la même, et supprime l'avertissement.

Alors, ignorez-la pour l'instant ou aller à l'avant-garde avec Canary (à vos risques et périls).

UPDATE : La version 3.2 est sortie !

0 votes

Remarque : la simple installation de AS 3.2 n'est pas suffisante. Vous devrez peut-être mettre à jour le plugin gradle en 4.6 et Android build gradle en 3.2.0.

17voto

T. Neidhart Points 3948

Il manque un espace entre le caractère générique * et le mot-clé extends . L'avertissement lui-même ne vient probablement pas de ProGuard mais du rétrécisseur intégré de google.

Si vous ne le trouvez pas dans votre projet, il s'agit probablement d'une règle non respectée par un fichier Proguard consommateur inclus dans les fichiers aar dépendants.

0 votes

Je pensais que je ne trouverais jamais d'informations utiles sur ce sujet. Bonne prise !

1 votes

+1 pour avoir fourni la raison derrière le problème, même si la réponse acceptée concernant le bug de Google est vraie.

11voto

mridul Points 955

J'ai eu le même problème à cause de "multiDexEnabled true" dans gradle defaultConfig.

J'ai résolu ce problème en ajoutant la dépendance multidex "implémentation 'com.Android.support:multidex:1.0.3'"

android {
defaultConfig {
    ...
    multiDexEnabled true
}
...
}

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

Référence : https://developer.Android.com/studio/build/multidex

5 votes

Cette solution ne fonctionnera pas dans tous les cas. J'ai ajouté exactement le même gradle multidex comme ceci mais l'avertissement apparaît toujours

0 votes

Oui... pour moi ça marche... merci @mridul

3voto

Hovanes Mosoyan Points 655

J'ai supprimé "multiDexEnabled true" de la configuration par défaut de l'application dans le build gradle et le WARNING disparaît :

defaultConfig {
    ...

    //multiDexEnabled true
}

dexOptions {
    javaMaxHeapSize "Xg"
}

bonne chance)

21 votes

Et si j'avais besoin de "multiDexEnabled true" ?

1 votes

@Artist404, ajoutez l'implémentation 'com.Android.support:multidex:1.0.3' dans les dépendances. SRC : developer.Android.com/studio/build/multidex

0 votes

Multidex activé vrai ou faux n'affectera pas le problème dans tous les cas. seulement dans certains cas.

3voto

syslogic Points 749

Classe android.support.annotation.Keep est ce que j'utilise
(qui s'appelle désormais androidx.annotation.Keep ).

-keep @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <methods>;
}

D'autres indicateurs permettent de contrôler les annotations à conserver :

-keepattributes RuntimeVisibleAnnotations
-keepattributes AnnotationDefault
-keepattributes *Annotation*

On peut obtenir la sortie brute en exécutant ./gradlew assembleRelease dans l'onglet du terminal.

Quand rien dans la configuration ProGuard du projet ne se réfère à Annotation cet avertissement peut provenir des règles de "consommation" d'une bibliothèque référencée, qui doivent être masquées au moment de la construction.

Il s'agit donc d'un avertissement inoffensif, que l'on peut éventuellement mettre en sourdine :

-dontwarn java.lang.annotation.Annotation

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X