我正在使用的應用程序正在使用Gradle構建。我正在嘗試添加Espresso作爲儀器測試的依賴項。該應用程序本身有一些依賴項,其中一個是Guava 15.0。爲了做到這一點,我使用Espresso版本的顯式依賴,並排除捆綁的番石榴(使用我自己的代替)。集成濃縮咖啡和Proguard和Gradle
dependencies {
...
instrumentTestCompile fileTree(dir: 'libs/espresso-dependencies', include: '*.jar')
compile 'com.google.guava:guava:15.0'
...
}
當我嘗試建立與gradle connectedInstrumentTest
,我得到與缺少方法和類的錯誤。
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState
at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35)
添加-keep class com.google.common.** { *; }
我Proguard的配置使一切工作正常。似乎正在發生的事情是,Proguard只分析主應用程序使用的類,並沒有在儀器測試依賴關係中查找使用情況。沒有被我的主應用程序使用但是儀器測試需要的方法/類似乎被優化了。
我該如何讓Proguard保持Espresso及其依賴所需的Guava類/方法?手動指定它們(有很多用法)似乎並不實際,並且保持所有這些都不符合Proguard的目的。
不幸的是,由於具有太多方法(通過庫),該應用程序由於沒有proguard而失敗了dex步驟。有足夠的餘地添加番石榴排除,但在其他地方也可能會出現類似的錯誤(即任何時候方法/類在測試中使用,但不在主應用程序中)。 – antonyt