2010-10-28 4 views
3

J'essaie d'utiliser ProGuard avec Android. J'ai trouvé plusieurs scripts ProGuard à utiliser, le suivant étant un exemple (j'en ai trouvé plusieurs autres qui sont identiques ou très similaires). Toutefois, lorsque j'essaie d'exécuter ProGuard à l'aide de ce script, j'obtiens l'erreur suivante:Utilisation de ProGuard avec Android.

"Type de fichier Java avant ';' à la ligne 23 du fichier ... "

Je suis complètement nouveau à ProGuard. Quelqu'un peut-il expliquer ce qui ne va pas ici

Merci.

-injars  bin(!.svn/**) 
-outjars  obfuscated 
-libraryjars C:\android-sdk_r04-windows\android-sdk-windows\platforms\android-1.6\android.jar 
-libraryjars C:\GoogleAnalyticsAndroid_0.7\libGoogleAnalytics.jar 

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

-printmapping proguard.map 
-keepattributes SourceFile,LineNumberTable 

-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 com.android.vending.licensing.ILicensingService 

-keepclasseswithmembernames class * { 
    native ; 
} 

-keepclasseswithmembernames class * { 
    public (android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembernames class * { 
    public (android.content.Context, android.util.AttributeSet, int); 
} 

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

Je ne suis pas le bas-électeur, mais je pense que les questions comme « où est mon bug » est plus adapté à un forum, parce que les autres ne seront pas obtenir beaucoup de lire la solution au bug. Si la question est légèrement modifiée: comment faire un fichier de configuration proguard qui fait ce que je veux, ce serait une bien meilleure question, car les réponses seraient utiles aux autres. – arberg

Répondre

3

Le problème est ici:

native ; 

Essayez de changer à:

native <methods>; 
+0

Merci pour la réponse. J'ai déjà essayé cela et il corrige l'erreur sur cette ligne, mais ensuite j'obtiens une erreur sur le 'public (android.content.Context, android.util.AttributeSet);' ligne. Ce que je ne comprends pas, c'est que, d'après les articles que j'ai trouvés, d'autres personnes ont clairement utilisé ce script avec succès. Utilisaient-ils une ancienne version de ProGuard ou autre chose? Merci. –

+1

Ok, je crois que j'ai identifié le problème. Ces scripts ont été postés sur certains blogs, et il semble que les blogs aient «mangé» tous les éléments qui étaient entre crochets (par exemple la balise «»). Traquer ces éléments et les restaurer a réussi à le faire fonctionner. Merci –

0

En regardant le message d'erreur votre compilateur a donné, il semble que le compilateur est pratiquement vous dire quel est le problème.

"Expecting java type before ';' in line 23 of file ..."

je perdu le compte, mais il semble que cette ligne est la ligne 23:

native ;

Je ne sais pas vous, mais cela ne ressemble pas valide Java à tout.

+1

Ce n'est pas Java, c'est un script qui est entré dans ProGuard, qui est un programme Java qui prend le code java et l'optimise, et l'obscurcit. J'espérais que quelqu'un avec de l'expérience avec ProGuard pourrait connaître la réponse. –

3

Comme je l'ai fait remarquer ci-dessus, il semble que le problème provient du fait que le blog dont j'ai obtenu la les scripts semblaient «manger» n'importe quoi avec des chevrons. J'ai décidé que ce serait bien d'afficher le code corrigé, au cas où quelqu'un le chercherait. Le code corrigé est le suivant:

-injars  bin(!.svn/**) 
-outjars  obfuscated 
-libraryjars C:\android-sdk\platforms\android-4\android.jar 

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

-printmapping proguard.map 
-keepattributes SourceFile,LineNumberTable 

-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 com.android.vending.licensing.ILicensingService 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

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

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

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