Proguard :忽略库混淆器错误

Proguard : ignore library proguard errors

我正在优化我的 proguard 配置,我仍然保留一些非强制性的 class 名称。

经过深思熟虑,我终于找到了原因。 我的 class 实现了 Parcelable 并且我使用了一些使用此 proguard 配置的库:

# Needed for Parcelable/SafeParcelable Creators to not get stripped
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

这似乎保留了 class 和 CREATOR 字段的名称。 我认为 CREATOR 字段确实是必需的,因为可以在官方 proguard-android-optimize.txt proguard 文件中阅读:

-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

因为我不是库的所有者,所以我无法更改它。有没有办法覆盖他们的 proguard 配置文件? (可能包含在 consumerProguardFiles gradle 关键字中)

感谢您的回答。

我终于找到了关于proguard-android-optimize.txt的解决方案。

在 AndroidStudio 中,您可以访问 proguard-android-optimize.txt(mac 上的 ⌘↑O,或 windows/linux 上的 control + shift + N。只需复制文件内容,然后将其粘贴到您的项目中,而无需删除您要删除的规则。最后将其用作您自己的proguardFiles。

替换

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

proguardFiles 'proguard-android-optimize.txt', 'proguard-rules.pro'

请注意,这需要您自担风险,并且您不会从最新的嵌入式 proguard 文件中获得优化。

关于 consumerProguardFiles 如果可以,您别无选择向他们提出拉取请求,或者如果您可以联系库作者,则要求进化。