Интеграция эспрессо с Proguard и Gradle

Приложение, над которым я работаю, строится с помощью Gradle. Я пытаюсь добавить Espresso в зависимость от тестов инструментов. Само приложение имеет несколько зависимостей, одним из которых является Guava 15.0. Чтобы сделать эту работу, я использую версию Espresso с явными зависимостями и исключаю вложенную Guava (вместо этого использую мой собственный).

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.** { *; } -keep class com.google.common.** { *; } мою конфигурацию Proguard, все работает нормально. Похоже, что Proguard анализирует классы, используемые главным приложением, и он не ищет использования зависимостей теста инструмента. Методы / классы, которые не используются моим основным приложением, но которые требуются для тестирования прибора, как представляется, оптимизированы.

Как я могу заставить Proguard сохранить классы / методы Guava, требуемые Espresso и его зависимостями? Кажется нецелесообразным указывать их все вручную (существует много обычаев), и все они побеждают цель Proguard.

Solutions Collecting From Web of "Интеграция эспрессо с Proguard и Gradle"

Вот что сработало для меня:

В build.gradle я добавил эту строку в раздел defaultConfig:

testProguardFile "test-proguard-rules.pro"

Затем я создал test-proguard-rules.pro со следующим содержимым:

 -dontobfuscate -dontwarn 

Это говорит о том, что gradle использует эту отдельную конфигурацию proguard для вашего теста apk, который содержит ваши контрольные тесты. В этом случае вы говорите proguard, чтобы не обфускать ваш тест apk, который, вероятно, вы хотите. Основной апк, который вы тестируете, по-прежнему запутывается с использованием существующей конфигурации proguard.

Не проверяйте свои апки (ов) во время тестирования, если только вам это не нужно.