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$* 

任何提示?

5 Solutions collect form web for “Android prouard,保持内部类”

尝试添加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)提到的那样,你也可能想要保留这些类的领域和方法 – 这取决于你的要求。

  • proguard地狱 - 找不到引用类
  • 如何避免反向工程的APK文件?
  • 在混淆代码中隐藏string
  • 在Eclipse中启用ProGuard for Android
  • 使用proguard删除日志通话
  • 当proguard被激活时,Gradle失败
  • ProGuard:库类的重复定义?
  • Android:Proguard的推荐configuration是什么?
  • 在Android中存储私人API密钥的最佳做法
  • 如何在Android上debugging混淆(使用ProGuard)应用程序?