ProGuard 中的 -keep 和 -keepclassmembers 有啥区别?
Posted
技术标签:
【中文标题】ProGuard 中的 -keep 和 -keepclassmembers 有啥区别?【英文标题】:What is the difference between -keep and -keepclassmembers in ProGuard?ProGuard 中的 -keep 和 -keepclassmembers 有什么区别? 【发布时间】:2013-05-05 00:02:23 【问题描述】:我通读了http://proguard.sourceforge.net/index.html#manual/usage.html,但无法理解它们的区别。
我用 2 个不同的选项进行了测试并反编译了结果。两者似乎产生相同的结果。
-keep class * implements android.os.Parcelable
*;
-keepclassmembers class * implements android.os.Parcelable
*;
【问题讨论】:
【参考方案1】:第一个 (-keep
) 将防止实现android.os.Parcelable
的类和类成员被删除或重命名。
后者 (-keepclassmembers
) 将保留实现android.os.Parcelable
的类的类成员不会被删除或重命名。
【讨论】:
你能澄清一下“被删除或重命名”吗? 收缩和混淆是 Proguard 的核心功能之一。 缩小(删除)和混淆(重命名)。以上是关于ProGuard 中的 -keep 和 -keepclassmembers 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
“不能为 child() 中的参数 'pathString' 传递 null”和其他 Proguard 和 Firebase 问题