Habilitación de ProGuard en Eclipse para Android

La nueva documentación sobre ProGuard para Android dice que se agrega una línea al archivo default.properties en el directorio inicial del proyecto. Sin embargo, al abrir este archivo, leí en la parte superior:

# This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 

¿Me estoy perdiendo de algo?

Además, ¿existe una forma de habilitar ProGuard sólo para una compilación de producción de Eclipse (es decir, al exportar el producto terminado)?

Sólo un seguimiento porque estaba buscando la misma cosa – y las respuestas aquí están anticuadas – últimamente la base proguard config está aquí en el sdk dir – por lo que sólo tiene que poner esto en su proyecto.properties:

 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt 

Si desea realizar modificaciones específicas de proyecto, cree un proguard-project.txt y cambie la línea a:

 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 

SDK de Android (r20 o superior)

Compruebe el proguard.config predefinido referido en project.properties

 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt 

Más información: http://proguard.sourceforge.net/manual/examples.html#androidapplication

En Gradle:

 buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' ... } } 

SDK de Android (r19 o inferior)

Puede agregarlo a default.properties. He estado agregando manualmente sin tener un problema hasta ahora.

Si agrega la línea:

 proguard.config=proguard.cfg 

Como se dijo, sólo utilizará ProGuard al exportar la aplicación firmada (Herramientas de Android => Aplicación de Firma de Exportación)

Si inicia el proyecto con el SDK antes de Android 2.3, no se proguard.cfg archivo proguard.cfg (junto a default.properties como en 2.3>).

Para habilitar la creación automática de la misma, basta con actualizar el SDK de Android 2.3 y crear un nuevo proyecto con las fuentes existentes (que son las fuentes del proyecto que tiene actualmente).

proguard.cfg se proguard.cfg relleno proguard.cfg .

Si todavía, desea crear manualmente esto es lo que debe contener:

 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontwarn android.support.** -verbose -dontoptimize -dontpreverify -keepattributes *Annotation* -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.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService -keep public class * extends android.support.v4.app.Fragment -keep public class * extends android.app.Fragment -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 public class * extends android.view.View { void set*(***); *** get*(); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class **.R$* { public static <fields>; } 

Creo que he respondido a todas las preguntas anteriores.

ACTUALIZACIÓN :

Una explicación line by line:

 #Use 5 step of optimization #-optimizationpasses 5 #When not preverifing in a case-insensitive filing system, such as Windows. This tool will unpack your processed jars,(if using windows you should then use): -dontusemixedcaseclassnames #Specifies not to ignore non-public library classes. As of version 4.5, this is the default setting -dontskipnonpubliclibraryclasses # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize -dontpreverify -dontwarn android.support.** #Specifies to write out some more information during processing. If the program terminates with an exception, this option will print out the entire stack trace, instead of just the exception message. -verbose #The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. Note that the Dalvik VM also can't handle aggressive overloading (of static fields). #To understand or change this check http://proguard.sourceforge.net/index.html#/manual/optimizations.html #-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file. #To repackage classes on a single package #-repackageclasses '' #Uncomment if using annotations to keep them. #-keepattributes *Annotation* #Keep classes that are referenced on the AndroidManifest -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.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService #Compatibility library -keep public class * extends android.support.v4.app.Fragment -keep public class * extends android.app.Fragment #To maintain custom components names that are used on layouts XML. #Uncomment if having any problem with the approach below #-keep public class custom.components.package.and.name.** # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } #To remove debug logs: -assumenosideeffects class android.util.Log { public static *** d(...); public static *** v(...); public static *** w(...); } #To avoid changing names of methods invoked on layout's onClick. # Uncomment and add specific method names if using onClick on layouts #-keepclassmembers class * { # public void onClickButton(android.view.View); #} #Maintain java native methods -keepclasseswithmembernames class * { native <methods>; } #To maintain custom components names that are used on layouts XML: -keep public class * extends android.view.View { public <init>(android.content.Context); } -keep public class * extends android.view.View { public <init>(android.content.Context, android.util.AttributeSet); } -keep public class * extends android.view.View { public <init>(android.content.Context, android.util.AttributeSet, int); } #Maintain enums -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #To keep parcelable classes (to serialize - deserialize objects to sent through Intents) -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #Keep the R -keepclassmembers class **.R$* { public static <fields>; } ###### ADDITIONAL OPTIONS NOT USED NORMALLY #To keep callback calls. Uncomment if using any #http://proguard.sourceforge.net/index.html#/manual/examples.html#callback #-keep class mypackage.MyCallbackClass { # void myCallbackMethod(java.lang.String); #} #Uncomment if using Serializable #-keepclassmembers class * implements java.io.Serializable { # private static final java.io.ObjectStreamField[] serialPersistentFields; # private void writeObject(java.io.ObjectOutputStream); # private void readObject(java.io.ObjectInputStream); # java.lang.Object writeReplace(); # java.lang.Object readResolve(); #} 

ACTUALIZACIÓN 2:

En el uso más reciente de ADT / Proguard, -keepclasseswithmembers clases con -keepclasseswithmembers lugar de -keepclasseswithmembernames clases con -keepclasseswithmembers de -keepclasseswithmembernames

Como de ADT 16 por lo menos, usted puede de hecho agregar la línea en project.properties , y se conservará. Puede intentar cambiar la versión de SDK de destino y ver que project.properties se actualiza en consecuencia pero la línea agregada sigue ahí. Por lo tanto, creo que la advertencia está mal redactada; Significa decir que los ajustes en el archivo como el target se sobrescribirán con la configuración del proyecto, en lugar de viceversa.

Los cambios en la configuración de ProGuard se produjeron con ADT versión 17. ProGuard se actualizó de 4.4 a 4.7 y se introdujo la diferencia en la referencia del archivo de configuración ya nota. Tenga en cuenta que los proyectos existentes se mantendrán sin cambios, dejándolos sin el conjunto de reglas más reciente incluido en esta versión de ADT. El documento relevante para la disposición más reciente de la configuración, ya señalado por ligi arriba, está disponible en:

http://tools.android.com/recent/proguardimprovements "En segundo lugar, hemos cambiado la forma en que se manejan los archivos de configuración."

Puede agregar la línea a build.properties , como se menciona en default.properties .

  • La aplicación Android desarrollada no puede conectarse a phpmyadmin
  • Android: El tipo java.lang.Enum no se puede resolver
  • Android Development Eclipse - No puede crear un nuevo proyecto Android - Mac OS
  • No se puede iniciar el proyecto cocos2dx ios en android
  • Emulador de Android se inicia pero Eclipse no lo reconoce
  • Android: no se puede importar BaseGameUtils con éxito en Eclipse
  • Eclipse no cambia automáticamente las configuraciones de ejecución
  • ¿Dónde puedo descargar una versión anterior del SDK de Android?
  • NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
  • Java.lang.IllegalArgumentException: AppCompat no admite las características del tema actual
  • Eclipse Android: cómo usar un proyecto de biblioteca con carpetas vinculadas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.