Proguard混淆不适用于活动?
问题描述:
我在我的项目上运行了proguard,但它不会混淆我的活动名称。我已经尝试了几个规则,它不工作。我不知道到底是什么意思,例如下面的规则:Proguard混淆不适用于活动?
-keep public class models.* {
*;
}
和最新
-keepclassmembers class * {
}
和
-keepclasseswithmembers class * {
}
我对有困难的区别这些规则如何工作。请帮忙。
答
在构建过程中,proguard检查AndroidManifest并保留所有活动类。这是您的应用程序运行所需的。您不应该混淆扩展android.app.Activity的类。
参见:
Why Proguard keeps Activity class in Android?
Why proguard processes AndroidManifest.xml
什么...... keepclassmembers之间...区别keepclasseswithmembers
根据文档:
-keepclassmembers
指定类成员被保留了,如果他们的类 保存为好。例如,您可能想要保留实现Serializable接口的所有类的字段和方法。
-keepclasseswithmembers
指定类和类成员被保存,条件 所有指定的类成员都存在。例如, 可能希望保留所有具有主方法的应用程序,而不需要 必须明确列出它们。
据我所知,ProGuard的可以在Java代码中(而不是在XML)唯一的工作,因此,如果他们混淆了活动的名称,它会乱用清单。所以也许android插件会自动添加一些规则,以免弄脏声明的东西,这是我们开发人员不应该搞砸的。所有这些只是假设和推论,而不是实际的知情答案。 – Budius