¿Cómo desactivar todas las funciones de Android ProGuard, excepto la ofuscación?
Google está sugiriendo que los desarrolladores podrían querer ocultar código de bytes:
Http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html
- Comportamiento anormal al usar proguard
- ¿Cómo puedo obfuscate una aplicación de Android fácilmente cuando se utiliza IntelliJ IDEA?
- ¿Cómo puedo ocultar mi código en Eclipse? (Androide)
- Salida de la herramienta de retrabajo Proguard
- Cómo ofuscar mi proyecto android en IDE eclipse?
Seguí las instrucciones de Google para obtener una aplicación Android ofuscada que, a primera vista, parecía funcionar. Pero hubo algunos errores extraños introducidos que no están en la aplicación no ofuscada. Seguí desactivando las opciones de ProGuard para llegar a esta configuración:
-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose
Todavía los bichos están allí. ¿Hay algo más que pueda apagar para obtener sólo ofuscación pura? La ofuscación sería agradable, pero estoy dispuesto a desactivar las otras características de ProGuard.
- Código ofuscado
- Opciones de Android Proguard: Reglas más estrictas y eliminar instrucciones de registro
- Android Proguard ExceptionInInitializerError y RuntimeException
- Proguarding Android Apps - lo esencial es (especialmente en relación con los pagos en la aplicación)
- Android Progaurd - Problema de conectividad a Internet después de exportar la aplicación
- ¿Proguard trabaja para ocultar las constantes de cadena estáticas?
- Problema del enum de ofuscación Proguard
- Proguard Obfuscation causando dex compliation para lanzar Excepciones
Esto es lo que 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
Obfusca pero mantiene público los métodos públicos y el nombre de clase de las clases que necesita Android. Como usted lo pidió no optimizar – las optimizaciones son más propensos a romper su programa debido a los métodos y constructores eliminados.
Si quieres probar, incluyendo las optimizaciones, esto es lo que hago (recuerda eliminar la opción -dontoptimize arriba)
#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
Yo uso proguard 4.5, pero otras versiones probablemente funcionan igual de bien.
- Obtener un resultado de Azure una fila se inserta y eliminar una fila de datos de la base de datos local después de insertar en base de datos Azure
- ¿Hay una solución para usar espresso con Lollipop (Android 21)?