2010-10-01 10 views
7

Google sugiere que los desarrolladores pueden querer ocultar el código de bytes:Cómo desactivar todas las funciones de Android ProGuard, excepto la ofuscación?

http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html

que siguieron las instrucciones de Google para obtener una aplicación para Android ofuscado que, a primera vista, parecía funcionar. Pero se introdujeron algunos errores extraños que no están en la aplicación no ofuscada. No dejaba apagar opciones ProGuard para llegar a esta configuración:

-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose

Aún así los errores están ahí. ¿Hay algo más que pueda desactivar para obtener solo ofuscación pura? La ofuscación sería agradable, pero estoy dispuesto a desactivar las otras funciones de ProGuard.

+0

¡Hola! ¿Has encontrado solución a tu pregunta? También me enfrenté con el mismo problema. https://stackoverflow.com/questions/47716524/proguard-android-execution-failed-for-task-presentationtransformclasseswith – yozhik

Respuesta

7

Esto es lo que yo uso:

-libraryjars ${android.jar} 
-injars  temp.jar 
-outjars proguard.jar 

#-printseeds: Prints the un-obfuscated filenames 
-printseeds 
-printmapping mapping-used-to-retrace-exceptions.txt 
-verbose 

#-dontusemixedcaseclassnames: Necessary when building on windows where x.class and X.class is the same file 
-dontusemixedcaseclassnames 

#-repackageclasses: Adds further obfuscation, Counter-indication: classes that look for resource files in their package directories will no longer work properly if they are moved elsewhere. When in doubt, just leave the packaging untouched by not using this option. 
-repackageclasses '' 

#-dontskipnonpubliclibraryclasses: Counter-indication: you probably shouldn't use this option when processing code that is to be used as a library, since classes and class members that weren't designed to be public in the API may become public. 
-dontskipnonpubliclibraryclasses 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 
-keep class * extends android.preference.Preference { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
}  
# LVL License binder class 
-keep class com.android.vending.licensing.ILicensingService  
# This is necessary for LVL among others. According to proguard doc java accesses enum fields by introspection. 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 
#Optimization settings 
-dontoptimize 

Se ofusca pública, pero mantiene los métodos públicos y nombre de la clase de clases necesarias por Android. Como solicitó, no se optimiza: es más probable que las optimizaciones rompan su programa debido a los métodos y constructores eliminados.

Si usted quiere probar que incluyen optimizaciones aquí es lo que hago (no olvide quitar la opción -dontoptimize anterior)

#Optimization settings  
# Keep (ie. don't remove) all public constructors of all public classes, but still obfuscate+optimize their content. This is necessary because optimization removes constructors which I use through reflection. 
-keepclassmembers class * { 
    <init>(...); 
} 

-optimizationpasses 7 
-allowaccessmodification 
# The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. 
-optimizations !code/simplification/arithmetic 

uso Proguard 4.5, pero otras versiones, probablemente funcionará igual de bien.

Cuestiones relacionadas