【问题标题】:Proguard Obfuscation doesnt work on activities?Proguard 混淆对活动不起作用?
【发布时间】:2016-11-25 20:27:24
【问题描述】:

我在我的项目上运行了 proguard,但它不会混淆我的活动名称。我已经尝试了几个规则,但它不起作用。我不知道它到底是什么意思,例如下面的规则:

-keep public class models.* {
  *;
}

和有什么区别

-keepclassmembers class * {

}

-keepclasseswithmembers class * {

}

我很难理解这些规则的运作方式。请帮忙。

【问题讨论】:

  • 据我所知,ProGuard 只能在 Java 代码上运行(不能在 XML 上运行),所以如果他们混淆了活动名称,它会与清单混淆。所以也许 android 插件会自动添加一些规则来不弄乱清单声明的东西,我们开发人员不应该弄乱这些东西。所有这些都只是假设和推论,而不是实际的知情答案。

标签: android proguard


【解决方案1】:

在构建过程中,proguard 检查 AndroidManifest 并保留所有活动类。这是您的应用程序运行所必需的。您不应混淆扩展 android.app.Activity 的类。


见:

Why Proguard keeps Activity class in Android?

Why proguard processes AndroidManifest.xml


...keepclassmembers 和 ...keepclasseswithmembers 之间有什么区别

根据文档:

-keepclassmembers

指定要保留的类成员,如果他们的类是 也保存下来。例如,您可能希望保留所有序列化 实现 Serializable 的类的字段和方法 界面。

-keepclasseswithmembers

根据条件指定要保留的类和类成员 所有指定的类成员都存在。例如,你 可能希望保留所有具有 main 方法的应用程序,而不 必须明确列出它们。

见:http://proguard.sourceforge.net/manual/usage.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多