8

我正在尝试对我的应用程序使用 Proguard,该应用程序最终将包含 LVL 和应用内计费。我遇到的问题是 Proguard 在启动时不断使我的应用程序崩溃,并且很难找出失败的原因。

我正在使用 Android V4 支持兼容性库,它似乎正在吹走该库以及其他一些东西。

有没有人有一个 proguard.cfg 可以与初学者的 v4 兼容库的基本版本一起使用?

目前我正在使用不起作用的股票 proguard.cfg。

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-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

-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 *;
}
4

2 回答 2

15

这还不足以产生一个工作应用程序。例如,proguard 将默认删除所有片段,并且还有一些更兼容的片段。它使用的库。

我发现了以下作品:

-dontwarn **CompatHoneycomb
-dontwarn **CompatHoneycombMR2
-dontwarn **CompatCreatorHoneycombMR2
-keep class android.support.v4.** { *; }

-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment

从理论上讲,如果您只是想将 proguard 作为混淆器并且对其其他“功能”不感兴趣,那么

-dontshrink
-dontoptimize

应该关掉。即便如此,尽管在真正的 android 1.6 手机上进行了彻底的测试。我没有发现,而且为时已晚,proguard 对仅在 1.6 上出现的二进制文件进行了重大更改...

于 2011-08-07T13:29:28.313 回答
8

要让 Proguard 使用 v4 兼容性库,请将其添加到您的 proguard.cfg:

-dontwarn **CompatHoneycomb
-keep class android.support.v4.** { *; }
于 2011-05-25T09:09:02.300 回答