2016-03-12 22 views
6

A volte installo la mia app per Android e ottengo la seguente eccezione, ma questa non è t sempre riproducibile.Java.lang.ClassCastException: Android.support.v7.widget.ContentFrameLayout non può essere lanciato su Android.support.v7.widget.ContentFrameLayout

java.lang.ClassCastException: android.support.v7.widget.ContentFrameLayout non può essere lanciato a android.support.v7.widget.ContentFrameLayout

Sto usando multidex sul mio app Android e ho letto this question sui dispositivi Samsung che hanno un bug con l'implementazione multidex ma questo accade su LG G3 con 5.1 e un HTC A9 con 6.0.

Qualcuno ha qualche idea del perché questo accade casualmente e cosa posso fare per risolverlo?

EDIT: Non posso condividere gran parte del codice perché questo è per un'azienda per cui lavoro.

buildscript { 
repositories { 
    mavenCentral() 
} 

dependencies { 
    classpath 'com.android.tools.build:gradle:1.5.0' 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
} 

}

applicare plugin: 'com.android.application' applicare plugin: 'com.neenbedankt.android-apt'

buildscript {{ repository mavenCentral()}

dependencies { 
    classpath 'com.android.tools.build:gradle:1.5.0' 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
} 

}

applicano plugin: 'com.android.application' applicare plugin: 'com.neenbedankt.android-apt'

repository { mavenCentral() Maven {url 'https://repository-achartengine.forge.cloudbees.com/snapshot' } Maven { url 'libs-mercurial.localrepo.localrepository' }}

Android { buildToolsVersion "23.0.2" compileSdkVersion 23

012.
dexOptions { 
    javaMaxHeapSize "4g" 
} 

defaultConfig { 
    minSdkVersion 18 
    targetSdkVersion 23 
    multiDexEnabled true 
} 

packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/ASL2.0' 
     exclude 'META-INF/INDEX.LIST' 
} 

lintOptions { 
    ignore 'ProtectedPermissions' 
} 

signingConfigs { 

    release { 
     storeFile file("somepath...") 
     storePassword System.getenv("some_password") 
     keyAlias "release" 
     keyPassword System.getenv("some_password") 
    } 
} 

buildTypes { 

    release { 
     minifyEnabled false 
     proguardFile getDefaultProguardFile('proguard-android.txt') 
     proguardFile 'proguard-config.txt' 
    } 

    debug { 
     minifyEnabled false 
     proguardFile getDefaultProguardFile('proguard-android.txt') 
     proguardFile 'proguard-config.txt' 
    } 
} 

dependencies { 

    compile 'com.android.support:multidex:1.0.0' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.0' 
    compile 'com.android.support:preference-v14:23.1.0' 

    compile ('com.m.c:CE:1.0') { 
     changing=true 
    } 

    compile ('com.m.c:APL:1.0') { 
     changing=true 
    } 

    compile ('c.m.c:C:1.0') { 
     changing=true 
    } 

    debugCompile 'ch.acra:acra:4.5.0' 

    compile files('libs-gradle/aM.jar') 
    compile files('libs-gradle/android-logging-log4j-m-1.0.3.jar') 
    compile files('libs-gradle/ce.jar') 
    compile 'com.google.android.gms:play-services-analytics:8.4.0' 

    apt 'com.squareup.dagger:dagger-compiler:1.2.2' 

} 

}

apply plugin: 'com.google.gms.google-services' 
+0

Mostra il tuo 'build.Gradle' –

+0

mostrare il codice per favore. includere le importazioni e gradle e log. –

+0

Ho aggiunto la maggior parte del file gradle dell'app, ma non posso condividere molto perché si tratta di un'applicazione aziendale, non mia. –

risposta

0

Qualche tempo fa abbiamo affrontato simile tipo di problema, abbiamo aggiunto

android { 
     dexOptions { 
      jumboMode = true 
     } 
    } 

in build.gradle e Classe di applicazione estesa per MultiDexApplication, prova se questo ti aiuta.

+0

Grazie, ci provo, ma sai perché è necessario? Le migliori informazioni che ho letto su questo, ma ancora non capisco: https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part- 1 –

+0

Ancora non capisco perché questo è necessario, ma finora non ho avuto un altro crash da allora. –

+0

Appena visto di nuovo, quindi questo non risolve il problema. La cosa strana è che ciò è accaduto dopo aver disabilitato e riabilitato l'app tramite setApplicationEnabledSetting, un permesso a livello di sistema. –

1

Ho trovato che il problema era con un flag che era stato impostato nel manifest per avere un processo persistente. La mia app è un'app di sistema caricata dal produttore e quando si verifica un aggiornamento, che uccide l'app, Android os riavvia il vecchio processo risultando in un comportamento strano. La mia soluzione ha finito per dover cambiare i nomi delle classi e dei componenti Android manifest per usare quei nuovi nomi di classe e lasciare che l'altro processo persistente si blocchi dopo l'aggiornamento. Dopo che l'app viene uccisa una volta o il telefono viene riavviato, quei processi muoiono e non vengono mai più lanciati. Ho anche rimosso il flag per il processo persistente.

Problemi correlati