L'utilisation de MultiDexApplication provoque la rupture du test Robolectric pour que la classe Application

Ajout du support Multi dex avec le support v4-r21 à l'aide de gradle def ( https://plus.google.com/+IanLake/posts/JW9x4pcB1rj )

apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "20.0.0" defaultConfig { applicationId "info.osom.multidex" minSdkVersion 19 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dexOptions { preDexLibraries = false } afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += '--multi-dex' dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString() } 

Maintenant, cela fonctionne pour l'application elle-même et je suis capable de construire et de déployer, mais lorsque je lance un test robo-électrique pour ma classe d'application, j'ai un échec de ZipUtils (qui est détecté dans MultiDex.java). Les autres tests fonctionnent bien. Voici la trace –

  • Les éléments de la barre d'action sont en double
  • Décodage vidéo Android Media Codec
  • Valeur de recherche pour la clé dans l'arborescence de chaîne
  • Android 5.0 rend les cases non sélectionnées invisibles lorsque l'arrière-plan est blanc
  • Puis-je écrire une application dans javascript / HTML / CSS et la vendre sur la boutique d'applications, sur Google Play et sur l'application mobile Microsoft?
  • Comment puis-je rendre une image transparente sur Android?
  • Causé par: java.lang.RuntimeException: l'installation de Multi dex a échoué (/ Users / Code / android-code / android /. (C'est un répertoire)). À android.support.multidex.MultiDex.install (MultiDex.java:178) à android.support.multidex.MultiDexApplication.attachBaseContext (MultiDexApplication.java:39) à android.app.Application.attach (Application.java:181) à Org.fest.reflect.method.Invoker.invoke (Invoker.java:112) à org.robolectric.internal.ParallelUniverse.setUpApplicationState (ParallelUniverse.java:155) à org.robolectric.RobolectricTestRunner.setUpApplicationState (RobolectricTestRunner.java:430) À org.robolectric.RobolectricTestRunner $ 2.evaluate (RobolectricTestRunner.java:236) à org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:271) à org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:70) À org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:50) à org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:238) à org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java : 63) à org.junit.runners.ParentRunner.runChildren (ParentRunner.java:236) à org.junit.runne Rs.ParentRunner.access $ 000 (ParentRunner.java:53) à org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:229) à org.robolectric.RobolectricTestRunner $ 1.evaluate (RobolectricTestRunner.java: 177) à org. Junit.runners.ParentRunner.run (ParentRunner.java:309) à org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass (JUnitTestClassExecuter.java:86) à org.gradle.api.internal.tasks. Testing.junit.JUnitTestClassExecuter.execute (JUnitTestClassExecuter.java:49) à org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass (JUnitTestClassProcessor.java:69) à org.gradle.api.internal.tasks. Testing.SuiteTestClassProcessor.processTestClass (SuiteTestClassProcessor.java:48) à org.gradle.messaging.dispatch.ReflectionDispatch.dispatch (ReflectionDispatch.java:35) à org.gradle.messaging.dispatch.ReflectionDispatch.dispatch (ReflectionDispatch.java:24) À org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch (ContextClassLoaderDispatch.jav A: 32) à org.gradle.messaging.dispatch.ProxyDispatchAdapter $ DispatchingInvocationHandler.invoke (ProxyDispatchAdapter.java:93) à com.sun.proxy. $ Proxy2.processTestClass (source inconnue) à org.gradle.api.internal.tasks .testing.worker.TestWorker.processTestClass (TestWorker.java:105)

  • Activité rafraîchissante lors de la réception de la notification push de gcm
  • Comment augmenter la taille de transport.dump de 256 octets à 512 octets ou plus dans KSOAP2?
  • Comment recevoir les données de l'intention d'envoi?
  • Comment faire pour filtrer une image dans Eclipse LogCat viewer
  • Streaming audio en direct avec Android 2.x
  • SQLite3 FTS4, MATCH et Android
  • 3 Solutions collect form web for “L'utilisation de MultiDexApplication provoque la rupture du test Robolectric pour que la classe Application”

    C'est un bug connu, attendez un correctif: https://github.com/robolectric/robolectric/issues/1328

    Ajoutez une ombre multidéposée en tant que votre dépendance :

     testCompile "org.robolectric:shadows-multidex:3.0" 

    Cela va se moquer de MultiDex. Installez l'appel et ne faites rien, car il n'y a pas dex dans Robolectric

    Vous devez créer une classe d'application qui hérite de MultiDexApplication attachBaseContext (Contexte) est remplacée et écraser une exception si elle s'exécute sur JavaVM.

      import android.content.Context; import android.support.multidex.MultiDexApplication; public class Application extends MultiDexApplication { @Override protected void attachBaseContext(Context base) { try { super.attachBaseContext(base); } catch (Exception e) { String vmName = System.getProperty("java.vm.name"); if (!vmName.startsWith("Java")) { throw e; } } } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.