Ibrahim Disouki
Ibrahim Disouki

Reputation: 2693

Proguard issue "Warning:Ignoring InnerClasses attribute for an anonymous inner class"

I don't know how I can describe this issue. I searched a lot, but I didn't find any solution.

Also this solution did not help me -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;
    }
}

And the jar folder contains ormlite-android-4.48.jar and ormlite-core-4.48.jar.

Proguard File:

-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.**

Error log:

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.

Rest of error log:

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)

Upvotes: 53

Views: 54459

Answers (8)

Uriel Frankel
Uriel Frankel

Reputation: 14622

For me what solved the problem was to use a newer version of jar. The clue was:

This class was probably produced by a 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.

So i changed from:

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

to:

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

Upvotes: 0

Sanket Parchande
Sanket Parchande

Reputation: 984

Add dex.force.jumbo=true into your gradle.properties. It works for me.

Upvotes: 1

Victor Zaffalon
Victor Zaffalon

Reputation: 49

I resolved a similar issue by updating the compile SDK, target SDK version, and support libraries version.

Upvotes: -2

maciekjanusz
maciekjanusz

Reputation: 4775

I've noticed that often the cause for this problem is when proguard-android.txt file is not referenced in the project, as it contains the correct configuration to avoid this issue:

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

Solution

Make sure to add this file to your project, along with your own ProGuard configuration files, for example:

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

The file is contained in the SDK so your gradle build will pick it up automatically, you don't need to copy it to your project.

Upvotes: 3

noomz
noomz

Reputation: 2065

I suggest -dontwarn InnerClasses

Upvotes: 9

Philip Herbert
Philip Herbert

Reputation: 4619

Adding these lines to proguard-rules.pro file fixed my issue.

-keepattributes EnclosingMethod
-keepattributes InnerClasses

Upvotes: 33

Oleg Cherr
Oleg Cherr

Reputation: 3685

You've got 2 problems here.

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

It's just a warning. If your code works properly you can ignore it by disabling Lint in the .gradle file:

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

This looks like in some place ProGuard optimizes variable allocation, but does it incorrectly.

Try to disable this optimization by adding the line below in your ProGuard file:

-optimizations !code/allocation/variable

Upvotes: 1

Tomik
Tomik

Reputation: 23977

Try adding

-keepattributes InnerClasses
-dontoptimize

to the ProGuard config. That should fix the problem.

It's probable that incompatible optimizations are applied (that probably causes the last line of the error log).

If you want to allow optimizations, it's necessary to fine tune optimizations config with

-optimizations optimization_filter 

option in ProGuard config.

Upvotes: 60

Related Questions