如何使用 proguard 混淆选择性课程?

Posted

技术标签:

【中文标题】如何使用 proguard 混淆选择性课程?【英文标题】:How do I obsfucate selective classes using proguard? 【发布时间】:2015-06-10 17:15:32 【问题描述】:

我想使用 proguard 混淆我的 android Studio 项目中的一些类。这些是 com.myproject.fragments 文件夹中的一些片段。所有这些类都扩展了 Android 的 Fragment 类。似乎到目前为止,我的 proguard 规则正在将这些类排除在混淆之外。请告诉我如何编辑我的 proguard 规则文件以使这种混淆发生。

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-keepattributes 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.content.Context

-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*(...);


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


-keepclasseswithmembers class * 
    public <init>(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 ** CREATOR;


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


-keepclassmembers class * 
    @android.webkit.javascriptInterface <methods>;



# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * 
    public static **[] values();
    public static ** valueOf(java.lang.String);
    public *;


-keep public enum com.sync.model$** 
    **[] $VALUES;
    public *;


# Application classes that will be serialized/deserialized over Gson
-keep class com.myproject.models.**  *; 
-keep class com.myproject.httputils.**  *; 


-keep class com.facebook.** 
   *;


-keep class com.androidplot.**  *; 

-keepclassmembers class * extends com.actionbarsherlock.ActionBarSherlock 
    <init>(android.app.Activity, int);


# Gson specific classes
#-keep class sun.misc.Unsafe  *; 
-keep class com.google.gson.stream.**  *; 

【问题讨论】:

【参考方案1】:

您可以在 Proguard 文件中排除特定的类和包...

用于排除特定类

-keep class com.demo.fragment.myfragment *;

用于排除整个包类

-keep class com.demo.fragment. *; **

【讨论】:

这会将类排除在混淆之外,对吧?我想强制“包含混淆”【参考方案2】:

您似乎正在使用此处提供的 proguard 文件模板 https://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg

自 2011 年以来一直没有更新

也检查一下 ProGuard for Android and GSON

【讨论】:

以上是关于如何使用 proguard 混淆选择性课程?的主要内容,如果未能解决你的问题,请参考以下文章

构建配置 ProGuard Shrink 混淆和压缩

如何通过 Eclipse 使用 Proguard 混淆 apk?

Proguard:如何避免缩小(和混淆)整个包以避免删除(和混淆)“未使用的方法”?

如何使用 proguard 混淆 android 库(.aar)?

ProGuard - 如何保留方法并同时混淆它们?

如何在 Eclipse 中使用 Proguard 混淆 Android 库(.jar 文件)