tutorial support studio minifyenabled library last features configurar android proguard android-support-library android-proguard

android - support - proguard tutorial



Problema de protección "Advertencia: ignorar el atributo InnerClasses para una clase interna anónima" (8)

Agregar estas líneas al archivo proguard-rules.pro solucionó mi problema.

-keepattributes EnclosingMethod -keepattributes InnerClasses

No sé cómo puedo describir este problema. Busqué mucho, pero no encontré ninguna solución.

Además, esta solución no me ayudó -keepattributes EnclosingMethod :

dependencies { compile project('':libraries:material-drawer'') compile fileTree(dir: ''libs'', include: [''*.jar'']) testCompile ''junit:junit:4.12'' compile ''com.android.support:appcompat-v7:23.2.0'' compile ''com.android.support:recyclerview-v7:23.2.0'' compile ''com.android.support:design:23.2.0'' compile ''com.google.code.gson:gson:2.4'' compile ''com.mcxiaoke.volley:library:1.0.19'' compile ''com.squareup.picasso:picasso:2.5.2'' compile ''com.squareup.okhttp:okhttp:2.4.0'' compile ''de.greenrobot:eventbus:2.4.0'' compile ''com.commit451:PhotoView:1.2.4'' compile ''com.nineoldandroids:library:2.4.0'' compile ''com.viewpagerindicator:viewpagerindicator:2.4.3'' compile(''com.github.afollestad.material-dialogs:commons:0.8.5.6@aar'') { transitive = true } compile(''com.crashlytics.sdk.android:crashlytics:2.5.5@aar'') { transitive = true; } }

Y la carpeta jar contiene ormlite-android-4.48.jar y ormlite-core-4.48.jar .

Archivo de protección:

-keepattributes EnclosingMethod -dontobfuscate -keep public class * extends android.support.v4.view.ActionProvider { public <init>(android.content.Context); } -dontwarn android.support.v4.** #FOR APPCOMPAT 23.1.1: -keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.* { *; } # Required for crashlytics #-keep class com.crashlytics.** { *; } #-keep class com.crashlytics.android.** -keepattributes SourceFile,LineNumberTable,*Annotation* # Required for eventbus -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } -keepclassmembers class ** { public void onEvent*(**); } # OrmLite uses reflection -keep class com.j256.** -keepclassmembers class com.j256.** { *; } -keep enum com.j256.** -keepclassmembers enum com.j256.** { *; } -keep interface com.j256.** -keepclassmembers interface com.j256.** { *; } # Keep the helper class and its constructor -keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper -keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper { public <init>(android.content.Context); } # Keep all model classes that are used by OrmLite # Also keep their field names and the constructor -keep @com.j256.ormlite.table.DatabaseTable class * { @com.j256.ormlite.field.DatabaseField <fields>; @com.j256.ormlite.field.ForeignCollectionField <fields>; } -keep public class org.codehaus.** -keep public class java.nio.** ##---------------Begin: proguard configuration for Gson ---------- # Gson uses generic type information stored in a class file when working with fields. Proguard # removes such information by default, so configure it to keep all of it. -keepattributes Signature # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.packagename.database.tables.** { *; } -keep class com.packagename.models.apidata.** { *; } -keep class com.packagename.models.data.** { *; } ## Nineolddroid related classes to ignore -keep class com.nineoldandroids.animation.** { *; } -keep interface com.nineoldandroids.animation.** { *; } -keep class com.nineoldandroids.view.** { *; } -keep interface com.nineoldandroids.view.** { *; } -dontwarn okio.**

Registro de errores:

Warning:Ignoring InnerClasses attribute for an anonymous inner class this warning is that reflective operations on this class will incorrectly (android.support.v4.app.FragmentTransitionCompat21$1) that doesn''t come with an (android.support.v4.view.accessibility.AccessibilityNodeProviderCompatJellyBean$1) that doesn''t come with an Warning:Ignoring InnerClasses attribute for an anonymous inner class indicate that it is *not* an inner class. Warning:Ignoring InnerClasses attribute for an anonymous inner class and without specifying any "-target" type options. The consequence of ignoring this warning is that reflective operations on this class will incorrectly (android.support.v4.view.ViewPropertyAnimatorCompatJB$1) that doesn''t come with an and without specifying any "-target" type options. The consequence of ignoring (io.fabric.sdk.android.services.common.ExecutorUtils$1) that doesn''t come with an compiler that did not target the modern .class file format. The recommended Warning:Ignoring InnerClasses attribute for an anonymous inner class associated EnclosingMethod attribute. This class was probably produced by a solution is to recompile the class from source, using an up-to-date compiler compiler that did not target the modern .class file format. The recommended compiler that did not target the modern .class file format. The recommended (android.support.v4.view.accessibility.AccessibilityNodeProviderCompatKitKat$1) that doesn''t come with an indicate that it is *not* an inner class. this warning is that reflective operations on this class will incorrectly and without specifying any "-target" type options. The consequence of ignoring (android.support.v4.view.AccessibilityDelegateCompatIcs$1) that doesn''t come with an solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring (android.support.v4.app.FragmentTransitionCompat21$3) that doesn''t come with an solution is to recompile the class from source, using an up-to-date compiler indicate that it is *not* an inner class. solution is to recompile the class from source, using an up-to-date compiler compiler that did not target the modern .class file format. The recommended this warning is that reflective operations on this class will incorrectly associated EnclosingMethod attribute. This class was probably produced by a Warning:Ignoring InnerClasses attribute for an anonymous inner class solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring associated EnclosingMethod attribute. This class was probably produced by a indicate that it is *not* an inner class. Warning:Ignoring InnerClasses attribute for an anonymous inner class indicate that it is *not* an inner class. (android.support.v4.view.ViewPropertyAnimatorCompatKK$1) that doesn''t come with an and without specifying any "-target" type options. The consequence of ignoring Warning:Ignoring InnerClasses attribute for an anonymous inner class solution is to recompile the class from source, using an up-to-date compiler this warning is that reflective operations on this class will incorrectly solution is to recompile the class from source, using an up-to-date compiler associated EnclosingMethod attribute. This class was probably produced by a Warning:Ignoring InnerClasses attribute for an anonymous inner class (android.support.v4.view.ViewPropertyAnimatorCompatICS$1) that doesn''t come with an (android.support.v4.app.FragmentTransitionCompat21$4) that doesn''t come with an solution is to recompile the class from source, using an up-to-date compiler this warning is that reflective operations on this class will incorrectly this warning is that reflective operations on this class will incorrectly compiler that did not target the modern .class file format. The recommended solution is to recompile the class from source, using an up-to-date compiler (android.support.v4.app.FragmentTransitionCompat21$2) that doesn''t come with an indicate that it is *not* an inner class. this warning is that reflective operations on this class will incorrectly compiler that did not target the modern .class file format. The recommended indicate that it is *not* an inner class. solution is to recompile the class from source, using an up-to-date compiler compiler that did not target the modern .class file format. The recommended and without specifying any "-target" type options. The consequence of ignoring and without specifying any "-target" type options. The consequence of ignoring indicate that it is *not* an inner class. this warning is that reflective operations on this class will incorrectly compiler that did not target the modern .class file format. The recommended Warning:Ignoring InnerClasses attribute for an anonymous inner class this warning is that reflective operations on this class will incorrectly compiler that did not target the modern .class file format. The recommended Warning:Ignoring InnerClasses attribute for an anonymous inner class indicate that it is *not* an inner class. associated EnclosingMethod attribute. This class was probably produced by a compiler that did not target the modern .class file format. The recommended associated EnclosingMethod attribute. This class was probably produced by a indicate that it is *not* an inner class. and without specifying any "-target" type options. The consequence of ignoring this warning is that reflective operations on this class will incorrectly Warning:Ignoring InnerClasses attribute for an anonymous inner class this warning is that reflective operations on this class will incorrectly (android.support.v4.view.AccessibilityDelegateCompatJellyBean$1) that doesn''t come with an Warning:Ignoring InnerClasses attribute for an anonymous inner class associated EnclosingMethod attribute. This class was probably produced by a associated EnclosingMethod attribute. This class was probably produced by a and without specifying any "-target" type options. The consequence of ignoring (android.support.v4.view.ViewCompatLollipop$1) that doesn''t come with an associated EnclosingMethod attribute. This class was probably produced by a solution is to recompile the class from source, using an up-to-date compiler Warning:Ignoring InnerClasses attribute for an anonymous inner class compiler that did not target the modern .class file format. The recommended indicate that it is *not* an inner class. this warning is that reflective operations on this class will incorrectly Warning:Ignoring InnerClasses attribute for an anonymous inner class indicate that it is *not* an inner class. associated EnclosingMethod attribute. This class was probably produced by a this warning is that reflective operations on this class will incorrectly indicate that it is *not* an inner class. solution is to recompile the class from source, using an up-to-date compiler associated EnclosingMethod attribute. This class was probably produced by a (com.android.volley.ExecutorDelivery$1) that doesn''t come with an solution is to recompile the class from source, using an up-to-date compiler compiler that did not target the modern .class file format. The recommended and without specifying any "-target" type options. The consequence of ignoring associated EnclosingMethod attribute. This class was probably produced by a and without specifying any "-target" type options. The consequence of ignoring indicate that it is *not* an inner class. compiler that did not target the modern .class file format. The recommended solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring indicate that it is *not* an inner class. this warning is that reflective operations on this class will incorrectly associated EnclosingMethod attribute. This class was probably produced by a associated EnclosingMethod attribute. This class was probably produced by a (io.fabric.sdk.android.services.common.ExecutorUtils$2) that doesn''t come with an Warning:Ignoring InnerClasses attribute for an anonymous inner class compiler that did not target the modern .class file format. The recommended associated EnclosingMethod attribute. This class was probably produced by a compiler that did not target the modern .class file format. The recommended and without specifying any "-target" type options. The consequence of ignoring Uncaught translation error: com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type int using a local variable of type android.support.design.widget.CoordinatorLayout$LayoutParams. This is symptomatic of .class transformation tools that ignore local variable information.

Resto del registro de errores:

Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.commit451/PhotoView/1.2.4/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.8/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.github.afollestad.material-dialogs/commons/0.8.5.6/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.github.afollestad.material-dialogs/core/0.8.5.6/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.viewpagerindicator/viewpagerindicator/2.4.3/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/support-v4/23.2.0/jars/classes.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.4.0/5b72bf48563ea8410e650de14aa33ff69a3e8c35/okio-1.4.0.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.6/jars/classes.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/com.nineoldandroids/library/2.4.0/e9b63380f3a242dbdbf103a2355ad7e43bad17cb/library-2.4.0.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/io.fabric.sdk.android/fabric/1.3.10/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.5.5/jars/classes.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.4/695b63d702f505b9b916e02272e3b6381bade7f/gson-2.4.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.1.4/jars/classes.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/com.mcxiaoke.volley/library/1.0.19/a8f23f65fc1e522ee4a1a697ee569901a46741fa/library-1.0.19.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/com.squareup.picasso/picasso/2.5.2/7446d06ec8d4f7ffcc53f1da37c95f200dcb9387/picasso-2.5.2.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.2.0/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.mikepenz/iconics/1.6.2/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/transforms/mergeJavaRes/release/jars/2/1f/main.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/AppName.libraries/material-drawer/unspecified/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.2.0/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/support-v4/23.2.0/jars/libs/internal_impl-23.2.0.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.2.0/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/design/23.2.0/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.2.0/jars/classes.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/com.mikepenz/iconics-core/1.6.2/jars/classes.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp/2.4.0/40340c0748190fe897baf7bffbc1b282734294e5/okhttp-2.4.0.jar] (filtered) Copying resources from program jar [/home/ibrahim/.gradle/caches/modules-2/files-2.1/de.greenrobot/eventbus/2.4.0/ddd166d01b3158d1c00576d29f7ed15c030df719/eventbus-2.4.0.jar] (filtered) Copying resources from program jar [path/to/application/app/build/intermediates/exploded-aar/me.zhanghai.android.materialprogressbar/library/1.1.4/jars/classes.jar] (filtered)


Agregue dex.force.jumbo=true en su gradle.properties. Esto funciona para mi.


Intenta agregar

-keepattributes InnerClasses -dontoptimize

a la configuración de ProGuard. Eso debería arreglar el problema.

Es probable que se apliquen optimizaciones incompatibles (lo que probablemente cause la última línea del registro de errores).

Si desea permitir optimizaciones, es necesario ajustar la configuración de optimizaciones con

-optimizations optimization_filter

opción en la configuración de ProGuard.


Me di cuenta de que a menudo la causa de este problema es cuando el archivo proguard-android.txt no está referenciado en el proyecto, ya que contiene la configuración correcta para evitar este problema:

# Preserve some attributes that may be required for reflection. -keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod

Solución

Asegúrese de agregar este archivo a su proyecto, junto con sus propios archivos de configuración de ProGuard, por ejemplo:

release { minifyEnabled true setProguardFiles([getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'']) }

El archivo está contenido en el SDK, por lo que su compilación de Gradle lo recogerá automáticamente, no necesita copiarlo en su proyecto.


Para mí, lo que resolvió el problema fue usar una versión más nueva de jar. La pista fue:

Esta clase probablemente fue producida por un compilador que no tenía como objetivo el formato de archivo .class moderno. La solución recomendada es recompilar la clase desde la fuente, utilizando un compilador actualizado.

Entonces cambié de:

compile ''com.google.inject:guice:4.0''

a:

compile ''com.google.inject:guice:4.2.0''


Resolví un problema similar actualizando el SDK de compilación, la versión del SDK de destino y la versión de las bibliotecas de soporte.


Sugiero -dontwarn InnerClasses


Tienes 2 problemas aquí.

1) Warning:Ignoring InnerClasses attribute for an anonymous inner class ......

Es solo una advertencia. Si su código funciona correctamente, puede ignorarlo deshabilitando Lint en el archivo .gradle :

android { ... lintOptions { abortOnError false } }

2) translation error: attempt to set or access a value of type int using a local variable of type android.support.design.widget.CoordinatorLayout$LayoutParams

Esto parece que en algún lugar ProGuard optimiza la asignación de variables, pero lo hace incorrectamente.

Intente deshabilitar esta optimización agregando la siguiente línea en su archivo ProGuard:

-optimizations !code/allocation/variable