Pregunta

Estoy tratando de utilizar ProGuard con Android. He encontrado varios scrips ProGuard de usar, con el siguiente es un ejemplo (He encontrado varios otros que son el mismo o muy similar). Sin embargo, cuando intento y funciono ProGuard uso de este script, me sale el error:

"Esperando tipo Java antes ';' en la línea 23 del archivo ... "

Soy completamente nuevo para ProGuard. ¿Puede alguien explicar lo que está mal aquí

Gracias.

-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);
}
¿Fue útil?

Solución

El problema está aquí:

native ;

Trate de cambiar a:

native <methods>;

Otros consejos

Como ya se ha comentado anteriormente, parece que el problema se deriva del hecho de que el blog de la que obtuve los guiones parecía ser 'comer' nada con paréntesis angulares. Decidí que sería bueno para publicar el código corregido, en caso de que nadie más lo está buscando. El código corregido es el siguiente:

-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);
}

Si buscas en el mensaje de error del compilador dio, parece que el compilador prácticamente te dice cuál es el problema.

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

he perdido la cuenta, pero parece que esta línea es la línea 23:

native ;

No sé ustedes, pero que no se parece a Java válido en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top