如何在Android测试中运行ProGuard?

时间:2015-07-29 15:52:16

标签: android testing gradle junit proguard

我们有一个包含一些库(和本机)依赖项的项目,如下所示:

Native SDK←Library(Wrapper)←主项目

首先,这个结构无法更改,因为我们正在重复使用这些部分。我面临的问题是通过65k参考限制。当然,这有一个解决方法 - 启用ProGuard。启用它后,项目将编译。

由于我们正在转换到Android的默认测试框架,我们需要在测试配置中添加更多依赖项,因此在依赖项中我们现在拥有:

compile 'com.google.android.gms:play-services-base:7.5.0'
compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-safetynet:7.5.0'
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:recyclerview-v7:22.2.1'

compile files('libs/small-library1.jar')
compile files('libs/small-library2.jar')
compile files('libs/small-library3.jar')
compile files('libs/medium-library1.jar')
compile files('libs/medium-library2.jar')
compile files('libs/medium-library3.jar')
compile files('libs/huge-library1.jar')
compile files('libs/huge-library2.jar')

androidTestCompile 'com.android.support.test:runner:0.3'
androidTestCompile 'com.android.support.test:rules:0.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'

我们正在使用SDK(API)22,所以一切都是最新版本。问题是,我们的原生SDK在protobuf层中有一堆代码,并且库包装器很大。对于所有其他JAR,我们超过65k的限制(但正如我所说,ProGuard几乎没有解决这个问题)。 Multi-dex是不可能的,因为它仅适用于Android 5.0 +。

我们正在尝试减少代码库,但即使这样,Android测试也会因方法引用溢出问题(即不编译)而失败。

是否有任何方法可以启用ProGuard进行测试?

1 个答案:

答案 0 :(得分:2)

一种选择是使用testBuildType将测试版本更改为发布版本或启用了ProGuard的其他版本变体。见Gradle User Guide。您也可以尝试解决方案here,但我自己没有尝试过。