【发布时间】:2011-05-08 09:45:02
【问题描述】:
我正试图解决这个问题,但我根本不明白为什么会这样:根据默认的 proguard.cfg 文件,我定义了以下规则:
-keep public class * extends android.app.Activity
据我了解,这意味着:保留任何 Activity 类作为入口点,但可以随意缩小/混淆/优化其中的任何内容(否则我必须使用例如 <methods> 通配符来保留方法,对吗?)。
现在我的测试活动看起来像这样:
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
...
}
public void unusedMethod() {
}
}
如果我现在导出一个签名的 APK,并调用了 ProGuard,它将按预期删除 unusedMethod,但它会保留 onCreate 方法并且不会混淆其名称。这是为什么呢?
【问题讨论】:
-
此外,如果我添加一个 POJO
A,其中包含从 MyActivity 调用的单个方法M,并且不为其指定任何保留规则,那么 ProGuard 将保留A并混淆它的名字,但它不会混淆M...我很困惑。 -
啊——实际上,我认为这是因为 ProGuard 决定内联该方法,因为它是一个单行... 有道理。