Приложение, над которым я работаю, создается с помощью Gradle. Я пытаюсь добавить Espresso в качестве зависимости для инструментальных тестов. Само приложение имеет несколько зависимостей, одна из которых — Guava 15.0. Чтобы это работало, я использую версию Espresso с явными зависимостями и исключаю встроенную гуаву (вместо нее использую свою собственную).
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 сохранить классы/методы Guava, необходимые для Espresso и его зависимостей? Нецелесообразно задавать их все вручную (существует много вариантов использования), и сохранение всех из них противоречит цели Proguard.