我正在试图模糊我的Android项目代码,我已经设法让ProGuard在我的proguard.cfg中包含以下内容时工作:
-keep class javax.** { *; }
-keep class org.codehaus.jackson.** { *; }
-keep class org.springframework.** { *; }
-keep class com.google.ads.**
这些是我在项目中使用的第三方依赖项(spring android,google ads等)。
问题是,当我在手机/模拟器上运行最终的apk时,我得到了NullPointerException。 似乎我的代码(混淆类类似于ab等)从这些第三方依赖项调用混淆的方法和类,但类名称现在是不同的(例如:一个名为Foo的类仍然是Foo因为我没有混淆它但是我的实际代码调用其他东西)。
有没有人设法让这种设置有效?我也应该混淆这些第三方图书馆吗?
答案 0 :(得分:1)
并不总是像你一样保留第三方库,但如果遇到问题,这是一个很好的第一步。
如果处理的代码与序列化数据不兼容,您可能仍会遇到JSON序列化/反序列化问题。然后,您必须确保同时保持序列化的类和字段,以防止ProGuard删除或重命名它们。
同样,如果删除或重命名带注释的类,字段和方法,您可能会看到Spring的问题。你必须保持它们。您还必须自己保留注释:
-keepattributes *Annotation*,Signature
基本上,反射问题总是失败,因为ProGuard无法预见它并删除或重命名了部分代码。 NullPointerException的堆栈跟踪应提供有关查看位置的更多信息。
有关更多建议,请参阅。 ProGuard手册> Troubleshooting