Intégrant Espresso avec Proguard et Gradle

L'application sur laquelle je travaille est en cours de construction avec Gradle. J'essaie d'ajouter Espresso comme dépendance pour les tests d'instruments. L'application elle-même possède quelques dépendances, dont l'une est Gava 15.0. Pour que cela fonctionne, j'utilise la version d'Espresso avec des dépendances explicites, et j'exclus la goyave groupée (en utilisant la mienne à la place).

dependencies { ... instrumentTestCompile fileTree(dir: 'libs/espresso-dependencies', include: '*.jar') compile 'com.google.guava:guava:15.0' ... } 

Lorsque j'essaie de construire avec gradle connectedInstrumentTest , j'ai des erreurs liées aux méthodes manquantes et aux classes.

  • Android n'utilise un curseur qu'avec des contacts contenant un courriel listé> Android 2.0
  • Les transitions d'éléments partagés ne fonctionnent pas lorsqu'elles sont combinées avec un CoordinatorLayout et CollapsingToolbarLayout
  • CookieSyncManager :: createInstance () doit être appelé avant CookieSyncManager :: getInstance ()
  • Comment configurer ViewPager à l'intérieur d'un fragment
  • Dans Android EditText, comment forcer l'écriture en majuscules?
  • ActivityNotFoundException (YES, cette activité est déclarée dans AndroidManifest.xml)
  •  java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35) 

    Ajout de la -keep class com.google.common.** { *; } -keep class com.google.common.** { *; } mon Proguard config, tout fonctionne bien. Ce qui semble se passer, c'est que Proguard ne fait que l'analyse des classes utilisées par l'application principale et ne cherche pas l'utilisation par les dépendances des tests d'instruments. Les méthodes / classes qui ne sont pas utilisées par mon application principale, mais qui sont nécessaires pour les tests d'instruments, semblent être optimisées.

    Comment puis-je faire en sorte que Proguard conserve les classes / méthodes de goyave requises par Espresso et ses dépendances? Il ne semble pas pratique de les spécifier tous manuellement (il existe de nombreux usages), et de les garder tous en échec dans le but de Proguard.

  • L'icône de l'application cliquant sur ne déclenche pas onOptionsItemSelected ()
  • Fragments statiques vs. fragments dynamiques
  • Proguard et RxAndroid V1.1.0
  • Différentes barres d'outils pour les fragments et le tiroir de navigation
  • InflateException: ligne de fichier XML n ° 1: erreur de classe de gonflage <inconnue> causée par OutOfMemoryError
  • Pourquoi le clavier doux est-il caché sur le CV?
  • 2 Solutions collect form web for “Intégrant Espresso avec Proguard et Gradle”

    Voici ce qui a fonctionné pour moi:

    Dans build.gradle, j'ai ajouté cette ligne à ma section defaultConfig:

    testProguardFile "test-proguard-rules.pro"

    Ensuite, j'ai créé test-proguard-rules.pro avec le contenu suivant:

     -dontobfuscate -dontwarn 

    Cela explique à Gradle d'utiliser cette configuration Proguard séparée pour votre apk de test, celle contenant vos tests d'instrumentation. Dans ce cas, vous dites à proguard de ne pas obscurcir votre apk de test, ce qui est probablement ce que vous voulez. L'apk principal que vous testez est encore obscurci à l'aide de votre configuration Proguard existante.

    Ne pas surveiller votre (vos) apk (s) pendant les tests, sauf si vous devez absolument le faire.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.