Proguard不会混淆gui组件

时间:2012-12-11 14:35:19

标签: android android-activity actionbarsherlock proguard

我想使用ProGuard来混淆我的Android应用。这很好用。但是我的gui课程延伸了活力,观点和sherlockactivity不会混淆。这是proguard.cfg

-injars      bin/classes
-injars      libs
-outjars     bin/classes-processed.jar
-libraryjars C:/Users/android-sdks/platforms/android-17/android.jar


-dontpreverify
-dontoptimize
-repackageclasses ''
-allowaccessmodification
-optimizationpasses 5
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keepattributes *Annotation*

-dontwarn    sun.misc.Unsafe
-dontwarn    com.actionbarsherlock.**
-dontwarn    com.google.common.**

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

-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.view.View
-keep public class * extends android.view.ViewGroup
-keep public class * extends android.support.v4.app.Fragment

-keepclassmembers class * extends android.app.Activity { 
public void *(android.view.View);
}
-keepclassmembers class android.support.v4.app.Fragment { 
*** getActivity(); 
public *** onCreate(); 
public *** onCreateOptionsMenu(...); 
}
-keepclassmembers class * extends com.actionbarsherlock.ActionBarSherlock {
public <init>(...); 
}

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

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


-keep public class * extends android.view.View {
   public <init>(android.content.Context);
   public <init>(android.content.Context, android.util.AttributeSet);
   public <init>(android.content.Context, android.util.AttributeSet, int);
   public void set*(...);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

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

-keepclassmembers class com.brainyoo.brainyoo2android.ui.html.BYJavaScriptInterface {
   public *;
}

首先,我认为由于反射调用

,活动不能被混淆
myactivity.class

我试图添加:

- keep public class mypackege.myactivity.class

但它没有解决问题。任何想法如何混淆gui元素?

由于 恭

1 个答案:

答案 0 :(得分:3)

  

但我的gui课程延伸了acitvit,view和sherlockactivtiy并不是虚假的。

这是因为您的ProGuard配置文件说不会混淆它们。此外,这很重要,好像他们 模糊,您的应用程序将无法运行,因为:

  • Android无法找到您重命名的活动
  • Android无法找到您的活动生命周期方法
  • Android将找不到您的小部件(用于解释布局资源时使用反射)
  

我曾尝试添加:-keep public class mypackege.myactivity.class但它无法解决问题。

那是因为你告诉ProGuard 混淆那个类。

  

任何想法如何使gui元素变得虚伪?

如果您希望在完成后拥有可用的应用程序,则不会这样做。