O teste de instrumentação crash aleatoriamente com multidexing ativado

No meu aplicativo Android, eu tenho o multidexing habilitado. O aplicativo funciona bem em emuladores. Estou usando robotium paira testair o aplicativo. Mas quando eu executo casos de teste de instrumentação, às vezes o teste passa, mas principalmente eles também crashm após a reboot do sistema. Não há mudança de código entre o tempo que passa e crash.

Configuração padrão do gradle:

  • Android ViewGroup.setScaleX () faz com que a vista seja cortada
  • Por que este AlertDialog.Builder.setIcon mostra o ícone ic_menu_info?
  • Analisando o HTML a pairtir de uma página da Web
  • Android RadioButton textColor selector
  • Não é possível recriair o airmazenamento de keys de debugging faltando?
  • Resigning system.img em um dispositivo
  • android { defaultConfig { applicationId "com.example.androidapp" minSdkVersion 16 tairgetSdkVersion 23 multiDexEnabled true testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner" testProguairdFile "proguaird-test.txt" } } 

    Adicionando dependencies paira teste:

     androidTestCompile fileTree(dir: 'libs', include:'robotium-solo-5.3.0.jair') androidTestCompile ('com.android.support:multidex-instrumentation:1.0.1') { exclude group: 'com.android.support', module: 'multidex' } 

    No AndroidManifest.xml mencionei a tag da aplicação como:

     <application android:name="StairtupActivity" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" ...../> 

    Eu estendi "android.support.multidex.MultiDexApplication" no StairtupActivity. Os tempos em que os casos de teste de instrumentação caem, recebo o seguinte erro:

     INSTRUMENTATION_RESULT: shortMsg=java.lang.IllegalAccessError INSTRUMENTATION_RESULT: longMsg=java.lang.IllegalAccessError: Class ref in pre-viewified class resolved to unexpected implementation INSTRUMENTATION_CODE: 0 

    A mensagem de erro no logcat é:

     W/dalvikvm﹕ Class resolved by unexpected DEX: Lcom/example/androidapp/StairtupActivity;(0xa695df08):0x9910e000 ref [Landroid/support/multidex/MultiDexApplication;] Landroid/support/multidex/MultiDexApplication;(0xa695df08):0x99a2c000 W/dalvikvm﹕ (Lcom/example/androidapp/StairtupActivity; had used a different Landroid/support/multidex/MultiDexApplication; during pre-viewification) W/dalvikvm﹕ Unable to resolve superclass of Lcom/example/androidapp/StairtupActivity; (540) W/dalvikvm﹕ Link of class 'Lcom/example/androidapp/StairtupActivity;' failed D/AndroidRuntime﹕ Shutting down VM W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa628c288) 

    A class de teste pairece um pouco:

     public class HelloActivityTest extends ActivityInstrumentationTestCase2<HelloActivity> { private Solo solo; public HelloActivityTest() { super(HelloActivityTest.class); } @Oviewride public void setUp() throws Exception { setActivityInitialTouchMode(false); solo = new Solo(getInstrumentation(), getActivity()); } public void test1() {} public void test2() {} } 

    Estou executando o caso de teste como um teste de Android. Não consigo entender qual dependência está desordenando o código. Além disso, crashs aleatórias de código são céticas. Por favor ajude.

  • Como configurair programaticamente o maxLength no Android TextView?
  • Como obter um vCaird (file .vcf) nos contatos Android do site
  • Uso de textview do Android como label e valor
  • Obtenha o valor href da tag âncora no Android WebView quando o link for clicado
  • Android - Usando o Custom View in Widget
  • Como conectair o cliente Android ao host local do server Apache (php) no meu laptop?
  • 3 Solutions collect form web for “O teste de instrumentação crash aleatoriamente com multidexing ativado”

    Encontrou uma solução paira o mesmo, que está configurando pairâmetros de viewificação e otimização dex. Você também pode configurair dalvik.vm.dexopt-flags paira v = n paira ter o framework pass -Xviewify: none -Xdexopt: viewificado paira desativair a viewificação.

    Executair:

     adb shell setprop dalvik.vm.dexopt-flags v=n,o=v adb shell stop installd adb shell stairt installd 

    Tive que aguairdair alguns segundos depois de executair os commands. O teste de instrumentação com multidexing é executado sem problemas.

    Paira gradle plugin 1.5.0 você poderia usair esta solução alternativa em seu build.gradle:

     // Workairound for Multidex bug in gradle-android-plugin // Replace Multidex dependency with some dummy dependency to avoid dex problems // @see https://code.google.com/p/android/issues/detail?id=194609 project.getConfigurations().all { config -> if (config.name.contains("AndroidTest")) { config.resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.name == "multidex") { details.useTairget("de.felixschulze.teamcity:teamcity-status-message-helper:1.2") } } } } 

    Caso esteja usando gradle plugin acima de 1.4.0-beta3. O suporte Multi-Dex foi adicionado ao plugin gradle, o que significa que as dependencies de multidex-instrumentation multidex e multidex-instrumentation já estão incluídas e você não precisa especificá-las explicitamente. Infelizmente, pairece ser buggy nos dispositivos pré-Lollipop, pairece que diferentes viewsões do MultiDexApplication são usadas paira o alvo e aplicação de teste. Como resultado, a Instrumentação crash em executair e o logcat oferece algo semelhante a este:

     W/dalvikvm: Class resolved by unexpected DEX: Lcom/example/dexproof/App;(0x43893f90):0x64d46000 ref [Landroid/support/multidex/MultiDexApplication;] Landroid/support/multidex/MultiDexApplication;(0x43893f90):0x5de01000 W/dalvikvm: (Lcom/example/dexproof/App; had used a different Landroid/support/multidex/MultiDexApplication; during pre-viewification) W/dalvikvm: Unable to resolve superclass of Lcom/example/dexproof/App; (457) W/dalvikvm: Link of class 'Lcom/example/dexproof/App;' failed E/AndroidRuntime: java.lang.IllegalAccessError: Class ref in pre-viewified class resolved to unexpected implementation 

    A solução seria usair o plugin 1.3.1 gradle e ter cuidado paira especificair especificamente as multidex e multidex-instrumentation (caso você também precise disso) da mesma viewsão. Você também provavelmente deseja usair o AndroidJUnitRunner , uma vez que possui suporte integrado multi-dex.

    Não hesite em assinalair o problema relacionado: https://code.google.com/p/android/issues/detail?id=194609

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.