web-dev-qa-db-fra.com

Utilisation de Proguard avec Android sans obfuscation

J'obtiens une erreur "La conversion au format Dalvik a échoué avec l'erreur 1" lors de l'utilisation de l'indicateur -dontobfuscate. Sinon, mon application exporte très bien. Je ne veux pas obscurcir car j'utilise BugSense pour le suivi des erreurs et ils facturent 99 $ par mois si vous devez désobscurcir vos traces de pile. Je souhaite toujours bénéficier de la taille du fichier et des avantages d'optimisation de proguard.

Si je commente -dontobfuscate tout fonctionne très bien. À l'exception des traces de pile illisibles.

mon fichier progaurd.cfg:

-dontobfuscate
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends Android.app.Activity
-keep public class * extends Android.app.Application
-keep public class * extends Android.app.Service
-keep public class * extends Android.content.BroadcastReceiver
-keep public class * extends Android.content.ContentProvider
-keep public class * extends Android.app.backup.BackupAgentHelper
-keep public class * extends Android.preference.Preference
-keep public class com.Android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(Android.content.Context, Android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(Android.content.Context, Android.util.AttributeSet, int);
}

-keepclassmembers class * extends Android.app.Activity {
   public void *(Android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(Java.lang.String);
}

-keep class * implements Android.os.Parcelable {
  public static final Android.os.Parcelable$Creator *;
}

J'accepterai également une réponse qui me pointe dans la bonne direction. Y a-t-il un fichier journal que je devrais consulter?

35
theJosh

Ajouter !code/allocation/variable est une solution de contournement pour le bogue ProGuard lorsque -dontobfuscate est défini sur votre -optimizations

Par exemple

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
36
Phil

Vous devez vous assurer que vous utilisez la dernière version du SDK Android ou au moins la dernière version de ProGuard (version 4.7 au moment de la rédaction) dans le SDK (Android-sdk/tools /proguard/lib/proguard.jar).

2
Eric Lafortune