Mat*_*ias 8 obfuscation android proguard minimization
ProGuard配置Android应用程序的常见模式是保留自定义View类,因为它们可能只是从布局XML而不是应用程序代码引用.
在项目创建时,ADT因此将这些规则添加到项目的proguard.cfg中:
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
Run Code Online (Sandbox Code Playgroud)
我想这里的想法是说,每当一个类定义一个可以由布局inflater调用的构造函数,然后保留它.但是,根据ProGuard文档,keepclasseswithmembernames限定符是keepclasseswithmembers和的简写allowshrinking,如果我理解正确的意思是:它允许删除这些类,但如果保留它们,不要混淆其成员名称(可能不会破坏它们之间的绑定) XML属性名称和类设置器).
但这是否意味着在缩小阶段(allowshrinking = true)仍会删除这些类,除非它们直接在代码中引用?事实上,这就是我们在我们的应用程序中使用的自定义小部件所发生的事情,我可以通过将规则设置为刚好来解决问题,keepclasseswithmembers因为这将完全保留匹配的类(值得注意的是这就是官方的ProGuard Android例子也是如此).
我误读了ProGuard文档,或者这是ADT项目向导中的错误?
Android SDK中的配置(至少版本11)确实不完全正确.
的为Android配置 ProGuard的文档中正确地指定为"-keepclasseswithmembers",而不是"-keepclasseswithmembernames".
| 归档时间: |
|
| 查看次数: |
6707 次 |
| 最近记录: |