由于Android上的Scala问题,我最近需要在Android上推出ProGuard.我需要ProGuard的缩小功能,它可以删除假定未使用的类.我非常关心删除类对可测试性的影响.
就目前而言,我编写了在主机上运行的单元测试和在Android平台上运行完全集成的应用程序的验收测试.
通常情况下,我会对相对完整的单元测试覆盖率和不稳定的验收测试覆盖率感到满意.但是,鉴于在我的代码中我大量使用Guice依赖注入,到目前为止,我的经验是ProGuard以一种我难以预测的方式删除代码.因此,它很可能会导致我引入错误.
这让我相信我需要编写完全覆盖的接受/平台测试,因为在任何时候,都可能缺少类.
其他人有这种经历吗?如果是这样,您的测试策略是什么?或者凭借经验,您是否更加确信ProGuard正在删除的课程真的不需要?
最佳答案
在尝试对已删除的类和/或模糊成员使用反射或Class#forName之前,ProGuard不会破坏您的应用程序.
根据我的经验(在Android上使用混淆的Scala),使用简单的冒烟测试很容易发现ProGuard对您的Android应用程序造成的问题.您知道项目中包含哪些库.如果其中一些使用反射或Class#forName – 对它们执行冒烟测试.然后从ProGuard配置中排除必要的类/成员.
还要记住,您可以使用ActivityInstrumentationTestCase2和模拟器自动化对混淆项目的测试.如果您计划在项目中使用ProGuard,请始终对混淆的APK执行检测测试.
总之 – 不要害怕.与ProGuard相关的问题是易于发现的相对论.