混淆android.support.v7.widget.GridLayout问题

3

我想对我的安卓应用进行混淆处理,其中我使用了android.support.v7.appcompat和android.support.v7.GridLayout,但是应用程序在运行过程中出现以下异常导致崩溃:

android.view.InflateException: Binary XML file line #2: Error inflating class    android.support.v7.widget.GridLayout
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:698)
at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at com.droid.fragments.c.al.onCreateView(Unknown Source)
at android.support.v4.app.Fragment.performCreateView(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
at android.support.v4.app.BackStackRecord.run(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: android.support.v7.widget.GridLayout
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.view.LayoutInflater.createView(LayoutInflater.java:552)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)

我的 proguard-project.txt 文件:

-dontusemixedcaseclassnames  
-dontskipnonpubliclibraryclasses  
-verbose  
-dontoptimize  
-dontpreverify  
-keepclasseswithmembernames class * {  
    native <methods>;  
}  

-keepattributes *Annotation*,EnclosingMethod,Signature  

-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  

-keepclassmembers public class * extends android.view.View {  
   void set*(***);  
   *** get*();  
}  

-keepclassmembers class * extends android.app.Activity {  
   public void *(android.view.View);  
}  

-keepclasseswithmembernames class * {  
   public <init>(android.content.Context, android.util.AttributeSet);  
}  

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}  

-keepclassmembers enum * {  
    public static **[] values();  
    public static ** valueOf(java.lang.String);  
}

-keep class * implements android.os.Parcelable {  
  public static final android.os.Parcelable$Creator *;  
  public void set*(***);  
  public *** get*();  
  public *** is*();  
}  

-keepclassmembers class **.R$* {  
    public static <fields>;  
}  

-keep class android.support.v7.widget.** { *; }  
-keep class android.support.v7.internal.** { *; }  
-keep interface android.support.v7.internal.** { *; }  
-keep class android.support.v4.widget.** { *; }  
-keep interface android.support.v4.widget.** { *; }  
-keep class com.viewpagerindicator.** { *; }  

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

我该如何解决这个问题?
2个回答

5
#### -- Support Library --

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

# support-v7
-dontwarn android.support.v7.**
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep class android.support.v7.** { *; }

1
你错过了-keep class android.support.v7.** { *; } - Felipe Lima

1
我正在使用类似于以下内容的东西(尽管可能过于宽泛):
# Preserve all fundamental application classes.
-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.view.View
-keep public class * extends android.preference.Preference
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

# Preserve Android support libraries` classes and interfaces
-keep class android.support.** { *; }
-keep interface android.support.** { *; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接