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