Android prouard,保持内部类

我的android程序有一个class A ,它有两个static inner class 。 在应用proguard后,发现它们被从.dex删除。

 public class A{ ... static class B{ ... } static class C{ ... } } 

我把proguard.flags中的以下行,但似乎没有运气。

 -keep class com.xxx.A -keep class com.xxx.A$* 

任何提示?

尝试添加InnerClasses到保持属性。 例如:

 -keepattributes Exceptions, InnerClasses, ... 

此外,尝试添加一个身体的“保持”呼叫星号,如下所示:

 -keep class com.xxx.A$* { *; } 

这是我必须做我的configuration

 -keep class com.xxx.A { *; } -keep class com.xxx.A$B { *; } -keep class com.xxx.A$C { *; } 

这为我做了诡计

 -keepattributes InnerClasses -keep class com.yourpackage.YourClass** -keepclassmembers class com.yourpackage.YourClass** { *; } 

通配符可能有点矫枉过正,但我​​想确保我没有错过任何东西。 最主要的是你需要InnerClasses属性保持类和类的keepclassmembers。

如果你不想让一些包中的所有内部类和成员被混淆,你可以在proguard-rules.pro中添加行

  -keep class com.xxx.task.*$* { *; } 

您的configuration看起来正确。 你应该仔细检查你没有拼错类名。 如果拼写错误,ProGuard应该打印出关于它的注释。 您也可以指定-printseeds seeds.txt ,并查看您的类是否在结果文件中列出。 如果列出,这些类也在处理的代码中。

正如亚历山大·卢卡斯(Alexander Lucas)提到的那样,你也可能想要保留这些类的领域和方法 – 这取决于你的要求。