2012-12-11 93 views
2

我想使用ProGuard来模糊我的Android应用程序。这工作正常。但是我的gui类扩展了acitvity,view和sherlockactivity不会被混淆。这里是proguard.cfgProguard不会混淆GUI组件

-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元素?

感谢 恭

+0

您是如何确定您的GUI类未被混淆的? –

+0

我认为这是'actionbarsherlock'的一个已知问题 –

+0

我确定我的GUI类没有被混淆,因为在obfusecating我的应用程序之后,我使用了dex2jar反汇编程序来获取我的apk的jar文件。然后我用了一个带gui的java反编译器。在那里,我可以看到我所有的类都被混淆了,除了我的GUI类 –

回答

3

但我的GUI类,它扩展acitvit,查看和sherlockactivtiy不obfusecated。

这是因为您的ProGuard配置文件表示不会对其进行混淆。此外,这是很重要的,因为如果他们混淆,您的应用程序将无法运行,因为:

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

我试图添加:-keep public class mypackege.myactivity.class但它不能解决问题。

那是因为你告诉ProGuard的到混淆阶级。

任何想法如何模糊gui元素?

如果您希望在完成后有工作应用程序,则不需要。

+0

@ChristineBauers这个答案最重要的部分是告诉你不要试图混淆你的活动。您可以更改规则以完成此操作,但之后Android将无法找到您的生命周期方法,这最多只会让您的活动无法使用,并且最糟糕的情况可能会导致应用程序崩溃异常。 – mah

+0

Ooohh ..知道我明白了。非常感谢:) –

+0

如果您不是从XML引用您的视图,那么混淆它们完全可以。没有问题 –