如何告诉 ProGuard 将所有内容保存在特定包中?

2024-04-21

我的应用程序有很多活动,也使用本机库。使用 Eclipse 生成的默认 ProGuard 配置,ProGuard 会删除很多东西 - OnClick 方法、静态成员、我的本机库使用的回调方法...是否有一种简单的方法来指示 ProGuard 不要从我的包中删除任何内容?删除一些东西只能节省大约 2.5% 的应用程序大小,但会完全破坏我的应用程序。在 ProGuard 配置中逐类配置、测试和维护它会很痛苦。


EDIT这个答案已经有 10 年历史了——它可能不适用于较新的 proguard 版本。

我认为您至少需要添加这些标志(修改您个人的包名称):

-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }

另外,添加这些标志:

-dontshrink
-dontoptimize
-dontpreverify

这是我的 Proguard.cfg 的整个配置文件:

-dontshrink
-dontoptimize
-dontpreverify
-verbose

-dontwarn javax.management.**
-dontwarn java.lang.management.**
-dontwarn org.apache.log4j.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.slf4j.**
-dontwarn org.json.**


-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
-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }

-keepclasseswithmembernames class * {
    native <methods>;
}

-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 *;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何告诉 ProGuard 将所有内容保存在特定包中? 的相关文章

随机推荐