Android proguard, keep inner class
我的Android程序有一个
1 2 3 4 5 6 7 8 9 10 11 | public class A{ ... static class B{ ... } static class C{ ... } } |
我在proguard.flags中添加了以下几行,但是似乎没有运气。
1 2 | -keep class com.xxx.A -keep class com.xxx.A$* |
有什么提示吗?
尝试将
1 | -keepattributes Exceptions, InnerClasses, ... |
另外,尝试将一个主体添加到带有星号的" keep"调用中,如下所示:
1 2 3 | -keep class com.xxx.A$* { *; } |
这就是我要做的配置
1 2 3 | -keep class com.xxx.A { *; } -keep class com.xxx.A$B { *; } -keep class com.xxx.A$C { *; } |
这对我有用
1 2 3 4 5 | -keepattributes InnerClasses -keep class com.yourpackage.YourClass** -keepclassmembers class com.yourpackage.YourClass** { *; } |
通配符可能有点过大,但是我想确保自己没有错过任何东西。最主要的是,您需要InnerClasses属性(该属性保留在类中)和keepclassmembers(保留在类中)。
如果您不希望混淆某个包中的所有内部类和成员,则可以在proguard-rules.pro中添加行
1 2 3 | -keep class com.xxx.task.*$* { *; } |
您的配置看起来正确。您应该仔细检查您是否没有拼写错误的类名。如果拼写错误,ProGuard应该打印出有关它的注释。您还可以指定
正如Alexander Lucas所提到的,您可能还希望保留这些类的字段和方法-这取决于您的要求。
大多数最重要的答案都能胜任,但是他们使用通配符
1 2 3 4 5 6 7 | -keepattributes Exceptions,InnerClasses,Signature, ... # preserve class and nested classes' fields and methods -keep class com.abc.package.clazzes.** { <fields>; <methods>; } |