NoClassDefFoundError when using proguard

匿名 (未验证) 提交于 2019-12-03 02:00:02

问题:

My Project contains some librarys (ViewPagerIndicator, ActionbarSherlock, SlidingMenu...). After using proguard, my application crash every time when starts. Below is error log

java.lang.NoClassDefFoundError:android.support.v4.appp.FragmentActivity$2 at android.support.v4.app.FragmentActivity. (Unknown Source).... 

And here is my proguard script:

    -injars      bin/classes -injars      libs -outjars     bin/classes-processed.jar  -dontpreverify -repackageclasses '' -allowaccessmodification -optimizations !code/simplification/arithmetic -keepattributes *Annotation* -verbose  -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.support.v4.app.FragmentActivity -keep public class * extends android.support.v4.app.Fragment  -keep public class * extends android.view.View {     public (android.content.Context);     public (android.content.Context, android.util.AttributeSet);     public (android.content.Context, android.util.AttributeSet, int);     public void set*(...); }  -keepclasseswithmembers class * {     public (android.content.Context, android.util.AttributeSet); }  -keepclasseswithmembers class * {     public (android.content.Context, android.util.AttributeSet, int); }  -keepclassmembers class * extends android.content.Context {    public void *(android.view.View);    public void *(android.view.MenuItem); }  -keepclassmembers class * implements android.os.Parcelable {     static android.os.Parcelable$Creator CREATOR; }  -keepclassmembers class **.R$* {     public static ; }    -dontwarn android.support.** -dontwarn com.google.android.maps.** -dontwarn com.slidingmenu.lib.app.SlidingMapActivity -keep class android.support.** { *; } -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; } -keep class com.slidingmenu.** { *; } -keep interface com.slidingmenu.** { *; } -keep public class com.viewpagerindicator.** { *; } -keep public interface com.viewpagerindicator.** { *; } 

Does anyone know what wrong with my proguard script? Please let me know, thank you in advance.

回答1:

Rather than being as specific with the package names

-keep public class * extends android.support.v4.app.FragmentActivity -keep public class * extends android.support.v4.app.Fragment 

Change it to this:

-keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } 

In the error it is looking for (note the extra p):

android.support.v4.appp.FragmentActivity$2  

rather than just

android.support.v4.app.FragmentActivity.

Edit, not sure what it could be, here's a full proguard for one of my apps that uses the support library and ActionBarSherlock.

##---------------Begin: proguard configuration common for all Android apps ---------- -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -dump class_files.txt  -printseeds seeds.txt  -printusage unused.txt  -printmapping mapping.txt  -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  -allowaccessmodification -keepattributes *Annotation* -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -repackageclasses ''  -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.android.vending.licensing.ILicensingService -dontnote com.android.vending.licensing.ILicensingService  # Explicitly preserve all serialization members. The Serializable interface # is only a marker interface, so it wouldn't save them. -keepclassmembers class * implements java.io.Serializable {     static final long serialVersionUID;     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(); }  # Preserve all native method names and the names of their classes. -keepclasseswithmembernames class * {     native ; }  -keepclasseswithmembernames class * {     public (android.content.Context, android.util.AttributeSet); }  -keepclasseswithmembernames class * {     public (android.content.Context, android.util.AttributeSet, int); }  # Preserve static fields of inner classes of R classes that might be accessed # through introspection. -keepclassmembers class **.R$* {   public static ; }  # Preserve the special static methods that are required in all enumeration classes. -keepclassmembers enum * {     public static **[] values();     public static ** valueOf(java.lang.String); }  -keep public class * {     public protected *; }  -keep class * implements android.os.Parcelable {   public static final android.os.Parcelable$Creator *; } ##---------------End: proguard configuration common for all Android apps ----------  # Remove Logging statements -assumenosideeffects class android.util.Log {     public static *** d(...);     public static *** v(...);     public static *** e(...);     public static *** i(...); }  ##---------------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.antew.redditinpictures.library.imgur.** { *; } -keep class com.antew.redditinpictures.library.reddit.** { *; }  ##---------------End: proguard configuration for Gson  ----------    ##---------------Begin: proguard configuration for ActionBarSherlock  ---------- -keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } -keep class com.actionbarsherlock.** { *; } -keep interface com.actionbarsherlock.** { *; }  ##---------------End:   proguard configuration for ActionBarSherlock  ---------- 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!