2016-03-12 36 views
6

Są chwile, kiedy instaluję moją aplikację na Androida i otrzymuję następujący wyjątek, ale to nie jest " t zawsze powtarzalne.Java.lang.ClassCastException: Android.support.v7.widget.ContentFrameLayout nie można przesłać do Android.support.v7.widget.ContentFrameLayout

java.lang.ClassCastException: android.support.v7.widget.ContentFrameLayout nie mogą być oddane do android.support.v7.widget.ContentFrameLayout

Używam multidex na mojej aplikacji dla Androida i czytam this question o urządzeniach Samsung mających błąd z implementacją wielościeżkową, ale tak się dzieje na LG G3 z systemem 5.1 i HTC A9 z systemem 6.0.

Ktoś ma jakieś pomysły, dlaczego tak się dzieje i co mogę zrobić, aby to naprawić?

EDYCJA: Nie mogę udostępnić dużej części kodu, ponieważ jest to dla firmy, dla której pracuję.

buildscript { 
repositories { 
    mavenCentral() 
} 

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

}

zastosowanie wtyczki: 'com.android.application' zastosowanie wtyczki: 'com.neenbedankt.android-apt'

buildscript { repozytoriów { mavenCentral() }

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

}

zastosowanie wtyczki: 'com.android.application' zastosowanie wtyczki: 'com.neenbedankt.android-apt'

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

android { buildToolsVersion "23.0.2" compileSdkVersion 23

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

Pokaż swój 'build.Gradle' –

+0

pokaż swój kod, proszę. obejmują import i gradle oraz log. –

+0

Dodałem większość pliku gradle aplikacji, ale nie mogę się nim dużo dzielić, ponieważ jest to aplikacja firmowa, a nie moja. –

Odpowiedz

0

Sometime powrotem mamy do czynienia podobnego rodzaju problemu, dodaliśmy

android { 
     dexOptions { 
      jumboMode = true 
     } 
    } 

w build.gradle i rozszerzonego klasy Application MultiDexApplication, spróbuj czy to pomaga.

+0

Dzięki temu spróbuję, ale czy wiesz, dlaczego jest to potrzebne? Najlepsze informacje, które przeczytałem na ten temat, ale nadal nie rozumiem: https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part- 1 –

+0

Nadal nie rozumiem, dlaczego jest to konieczne, ale do tej pory nie dostałem kolejnego wypadku od tego czasu. –

+0

Po prostu zobaczyłem to ponownie, więc to nie rozwiązuje problemu. Dziwne jest to, że stało się to po wyłączeniu, a następnie ponownym włączeniu aplikacji za pomocą setApplicationEnabledSetting, uprawnienia na poziomie systemu. –

1

Stwierdziłem, że problem dotyczył flagi ustawionej w manifeście z powodu trwałego procesu. Moja aplikacja to aplikacja systemowa ładowana przez producenta, a gdy pojawi się aktualizacja, która zabije aplikację, Android os ponownie uruchomi stary proces, co spowoduje dziwne zachowanie. Moje rozwiązanie zakończyło się koniecznością zmiany nazw klas i elementów manifestu systemu Android, aby używać tych nowych nazw klas, i niech drugi trwający proces po prostu zawiesi się po aktualizacji. Po jednokrotnym zabiciu aplikacji lub ponownym uruchomieniu telefonu procesy te giną i nigdy nie są uruchamiane ponownie. Usunąłem także flagę dla trwałego procesu.

Powiązane problemy