8
votes

Googleanalyticsv2 et proguard

J'utilise la bibliothèque Google Analytics V2 dans mon projet.

Lorsque j'exporter l'exportation de package d'applications signé à partir d'Eclipse, je reçois la suite de la sortie dans la console: p>

    at proguard.ProGuard.main(ProGuard.java:492)
   Proguard returned with error code 1. See console
         You should check if you need to specify additional program jars.
   Unexpected error while evaluating instruction:
     Class       = [android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl]
     Method      = [newAccessiblityDelegateBridge(Landroid/support/v4/view/AccessibilityDelegateCompat;)Ljava/lang/Object;]
     Instruction = [18] areturn
     Exception   = [java.lang.IllegalArgumentException] (Can't find any super classes of [android/support/v4/view/AccessibilityDelegateCompatIcs$1] (not even immediate super class [android/view/View$AccessibilityDelegate]))
   Unexpected error while performing partial evaluation:
     Class       = [android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl]
     Method      = [newAccessiblityDelegateBridge(Landroid/support/v4/view/AccessibilityDelegateCompat;)Ljava/lang/Object;]
     Exception   = [java.lang.IllegalArgumentException] (Can't find any super classes of [android/support/v4/view/AccessibilityDelegateCompatIcs$1] (not even immediate super class [android/view/View$AccessibilityDelegate]))
   java.lang.IllegalArgumentException: Can't find any super classes of [android/support/v4/view/AccessibilityDelegateCompatIcs$1] (not even immediate super class [android/view/View$AccessibilityDelegate])
    at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:287)
    at proguard.evaluation.value.IdentifiedReferenceValue.generalize(IdentifiedReferenceValue.java:65)
    at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:481)
    at proguard.optimize.info.MethodOptimizationInfo.generalizeReturnValue(MethodOptimizationInfo.java:247)
    at proguard.optimize.evaluation.StoringInvocationUnit.generalizeMethodReturnValue(StoringInvocationUnit.java:195)
    at proguard.optimize.evaluation.StoringInvocationUnit.setMethodReturnValue(StoringInvocationUnit.java:126)
    at proguard.evaluation.BasicInvocationUnit.exitMethod(BasicInvocationUnit.java:134)
    at proguard.evaluation.Processor.visitSimpleInstruction(Processor.java:514)
    at proguard.classfile.instruction.SimpleInstruction.accept(SimpleInstruction.java:218)
    at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:753)
    at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:587)
    at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:560)
    at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264)
    at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181)
    at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
    at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79)
    at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
    at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91)
    at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71)
    at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504)
    at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)
    at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
    at proguard.classfile.ClassPool.classesAccept(ClassPool.java:116)
    at proguard.optimize.Optimizer.execute(Optimizer.java:372)
    at proguard.ProGuard.optimize(ProGuard.java:306)
    at proguard.ProGuard.execute(ProGuard.java:115)
    at proguard.ProGuard.main(ProGuard.java:492)


3 commentaires

J'ai remarqué que vous n'avez pas précisé -libraryjars?


@ Shériifelkhatib j'ai essayé -libraryjars ./libs/ \lib_name}


Je ne sais pas si vous avez les options de PROGUARD par défaut introduites dans de nouvelles versions des outils Android. Conseil: mettez à jour vos outils Android dans votre responsable SDK et mettez à jour votre plugin Adt. Créez un nouveau projet et déplacez toutes vos ressources au nouveau projet. Vous aurez un fichier proguard-project.txt. Ajouter à l'instruction -Dontwarn.


3 Réponses :


18
votes

J'ai aussi fait face à ce problème. Comme il n'y a pas encore de solution officielle dans la documentation GA, j'ai inventé cet ensemble de règles:

-keep class com.google.android.gms.analytics.**
-keep class com.google.analytics.tracking.**
-dontwarn com.google.android.gms.analytics.**
-dontwarn com.google.analytics.tracking.**


2 commentaires

Cette réponse ne résout pas le problème de l'Asker, car le symbole manquant est référencé dans le bocal GAV2, non défini. Cependant, il s'agit de la définition correcte proguard pour GAV2 et empêchera d'autres erreurs de symboles manquantes.


Je reprends ça. Les options -Dontwarn peuvent masquer les erreurs de symboles manquantes (telles que l'oublier d'exporter un pot, comme je l'ai fait) au moment de la construction, ce qui entraînera toujours des erreurs au moment de l'exécution.



5
votes

L'avertissement initial indique que FutureAppis invoque le fichier # Serecheadable (Boolean, Boolean), qui n'existe pas sur la plate-forme cible que vous avez spécifiée pour votre construction (apparemment Android-8 ou plus). PROGUARD peut l'ignorer, mais ce sera un problème si ce code est jamais exécuté sur ces plateformes anciennes. La documentation de Google Analytics Spécifie qu'Android-7 est suffisante, l'ignorant donc probablement c'est bien.

L'erreur inattendue indique que la classe d'assistance V4 AccessibilitéDelegatecompatics 1 $ EXTENDURE Vue de la classe Android $ accessibilitéDelegate, qui n'existe pas sur la plate-forme cible que vous avez spécifiée pour votre construction (Android-13 ou plus). Dans ce cas, PROGUARD a vraiment besoin de cette classe pour traiter correctement le code. Avec une hiérarchie de classe incomplète, la sortie serait un gâchis.

Vous pouvez résoudre les deux problèmes en spécifiant une cible de construction plus récente dans le projet.Properties lors de la compilation de votre version de version. Les classes et méthodes manquantes seront présentes dans l'Android.jar correspondant, de sorte que PROGUARD aura toutes les informations dont il a besoin. Étant donné que ces classes ne sont que des classes de bibliothèque d'exécution, utilisées pour la compilation / optimisation / obfuscation, elles n'affecteront pas la sortie.


0 commentaires

0
votes

J'ai couru dans le même problème - j'ai pu supprimer les erreurs lors de la création d'une branche pour la libération - mais lorsque l'application est tombée, dans les endroits où les classes auxquelles vantards obfuscator. Pour le moment je n'ai pas résolu ce problème. Ce qui est intéressant, c'est que dans le mode de déballe lors de l'exécution de l'application via Eclipse - et cela fonctionne parfaitement.


0 commentaires