【发布时间】:2013-12-16 20:09:27
【问题描述】:
我已将 ProGuard 应用到我的 Android 应用程序。
我正在使用
android-studio/sdk/tools/proguard/proguard-android.txt
作为配置文件,什么都不做。
在这个文件中,我可以看到关于Activity的唯一声明:
We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
由此可见,Activity 类名被 ProGuard 混淆了,而一些方法保持原样。这是可以理解的。
但是,在我的应用程序中,我使用字符串从字符串创建一个 Activity 类
Class.forName("my.app.MyActivity")
然后我启动这个 Activity,它开始正常。
但这意味着 Activity 派生的类没有被混淆??。它应该失败了,因为 ProGuard 没有 Activity 的 -keep class 指令,它只有 -keepclassmembers.
如果我可以依赖我观察到的行为,请有人解释一下吗?还是我误解了-keepclassmembers 指令?
【问题讨论】:
-
您应该发布整个文件,因为仅此行不足以解释为什么它保留 Activity 名称