android - studio - espresso check
Integrando Espresso con Proguard y Gradle (2)
No proteja sus apk (s) durante las pruebas, a menos que sea absolutamente necesario.
La aplicación en la que estoy trabajando se está construyendo con Gradle. Estoy tratando de agregar Espresso como una dependencia para las pruebas de instrumentos. La aplicación en sí tiene algunas dependencias, una de las cuales es Guava 15.0. Para que esto funcione, utilizo la versión de Espresso con dependencias explícitas y excluyo el Guava incluido (usando el mío en su lugar).
dependencies {
...
instrumentTestCompile fileTree(dir: ''libs/espresso-dependencies'', include: ''*.jar'')
compile ''com.google.guava:guava:15.0''
...
}
Cuando intento compilar con gradle connectedInstrumentTest
, obtengo errores relacionados con métodos y clases faltantes.
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState
at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35)
Agregando -keep class com.google.common.** { *; }
-keep class com.google.common.** { *; }
a mi configuración Proguard hace que todo funcione bien. Lo que parece estar sucediendo es que Proguard solo está analizando las clases utilizadas por la aplicación principal y no está buscando el uso de las dependencias de prueba del instrumento. Los métodos / clases que no están siendo utilizados por mi aplicación principal, pero que son necesarios para las pruebas de instrumentos, parecen optimizados.
¿Cómo puedo hacer que Proguard mantenga las clases / métodos de Guava requeridos por Espresso y sus dependencias también? No parece práctico especificarlos todos manualmente (hay muchos usos), y mantener todos ellos las derrotas con el propósito de Proguard.
Esto es lo que funcionó para mí:
En build.gradle agregué esta línea a mi sección defaultConfig:
testProguardFile "test-proguard-rules.pro"
Luego creé test-proguard-rules.pro con los siguientes contenidos:
-dontobfuscate
-dontwarn
Esto le dice a Gradle que use esta configuración de protección separada para su prueba de prueba, la que contiene sus pruebas de instrumentación. En este caso, le está diciendo a Proguard que no ofusque su apk de prueba, que es probablemente lo que quiere. La aplicación principal que está probando todavía se ofusca con su configuración existente de proguard.