2016-03-12 5 views
6

Есть случаи, когда я устанавливаю приложение для Android, и я получаю следующее исключение, но это isn ' всегда воспроизводимый.Java.lang.ClassCastException: Android.support.v7.widget.ContentFrameLayout не может быть добавлен в Android.support.v7.widget.ContentFrameLayout

java.lang.ClassCastException: android.support.v7.widget.ContentFrameLayout не может быть приведен к android.support.v7.widget.ContentFrameLayout

Я использую multidex на моем Android приложение и я прочитал this question о устройствах Samsung, имеющих ошибку с реализацией multidex, но это происходит на LG G3, работающем под управлением 5.1, и на HTC A9, работающем под управлением 6.0.

У кого-нибудь есть идеи, почему это происходит случайно и что я могу сделать, чтобы исправить это?

EDIT: Я не могу использовать большую часть кода, потому что это для компании, в которой я работаю.

buildscript { 
repositories { 
    mavenCentral() 
} 

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

}

применить плагин: 'com.android.application' применить плагин: 'com.neenbedankt.android-APT'

buildscript { репозиториев { mavenCentral() }

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

}

применить плагин: 'com.android.application' применить плагин: 'com.neenbedankt.android-APT'

репозиториев { mavenCentral() Maven { URL 'https://repository-achartengine.forge.cloudbees.com/snapshot' } Maven { URL 'ЛИЭС-localrepository' }}

андроид { 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

Показать ваш 'build.Gradle' –

+0

показать ваш код пожалуйста. включают импорт и градицию и журнал. –

+0

Я добавил большую часть файла градиента приложения, но я не могу разделить многое, потому что это приложение для компании, а не мое. –

ответ

0

Некоторое время назад мы столкнулись с подобного рода проблемы, мы добавили

android { 
     dexOptions { 
      jumboMode = true 
     } 
    } 

в build.gradle и расширенном классе приложений для MultiDexApplication, пожалуйста, попробуйте это помогает ли вам.

+0

Спасибо, я дам ему попробовать, но знаете ли вы, почему это необходимо? Лучшая информация, которую я прочитал об этом, но я до сих пор не понимаю: https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part- 1 –

+0

По-прежнему не понимаю, почему это необходимо, но до сих пор я не получил еще один сбой. –

+0

Просто увидел это снова, так что это не устраняет проблему. Странно, что это произошло после отключения и повторного включения приложения через setApplicationEnabledSetting, разрешение на системный уровень. –

1

Я обнаружил, что проблема связана с флагом, установленным в манифесте, для обеспечения постоянного процесса. Мое приложение - это системное приложение, загруженное производителем, и когда происходит обновление, которое убивает приложение, android os перезапускает старый процесс, что приводит к нечетному поведению. Моему решению пришлось изменить имена классов и компоненты манифеста Android, чтобы использовать эти новые имена классов, а другой постоянный процесс просто зависает после обновления. После того, как приложение было убито один раз или телефон перезагружен, эти процессы умирают и никогда не запускаются снова. Я также удалил флаг для постоянного процесса.

Смежные вопросы