Java.lang.ClassCastException: Android.support.v7.widget.ContentFrameLayout 无法转换为 Android.support.v7.widget.ContentFrameLayout。

7
有时候我安装我的Android应用程序时,会出现以下异常,但这并非总是可以重现。
java.lang.ClassCastException:android.support.v7.widget.ContentFrameLayout无法转换为android.support.v7.widget.ContentFrameLayout
我在我的Android应用程序上使用multidex,并阅读了关于三星设备具有multidex实现错误的此问题,但这在运行5.1的LG G3和运行6.0的HTC A9上发生。
有人知道为什么会随机发生这种情况,以及我该怎么做才能解决它吗?
编辑:我不能分享太多代码,因为这是我工作的公司的代码。
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'

构建脚本 { 仓库 { Maven中央() }

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'

仓库 { 中央仓库() 仓库 { url 'https://repository-achartengine.forge.cloudbees.com/snapshot' } 仓库 { url 'libs-localrepository' } }

安卓 { 构建工具版本 "23.0.2" 编译SDK版本 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'

展示你的 build.Gradle 文件。 - IntelliJ Amiya
请展示你的代码。包括导入、Gradle 和日志。 - Sagar Nayak
我已经添加了大部分的app gradle文件,但是我不能分享太多,因为这是公司的应用程序,而不是我的。 - Juan Acevedo
2个回答

1
我发现问题出在清单文件中设置了一个持久进程的标志。我的应用是由制造商加载的系统应用程序,当更新发生时,应用程序被终止,Android操作系统重新启动旧进程,从而导致异常行为。我的解决方案最终需要更改类名和Android清单组件以使用这些新类名,并让其他持久进程在更新后继续运行。应用程序被杀死一次或手机被重新启动后,这些进程将死亡并且不会再次启动。我还删除了持久进程的标志。

0

前段时间我们遇到了类似的问题,我们添加了

    android {
        dexOptions {
          jumboMode = true
        }
    }

在 build.gradle 中扩展 Application 类为 MultiDexApplication,请尝试这是否有帮助。

谢谢,我会试一下,但是你知道为什么需要这样做吗?这是我读过的关于这个问题最好的资料,但我还是不太明白:https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part-1 - Juan Acevedo
我仍然不理解为什么这是必要的,但自从那以后我没有再遇到崩溃。 - Juan Acevedo
刚刚又看到了,所以这并没有解决问题。奇怪的是,在通过setApplicationEnabledSetting禁用然后重新启用应用程序之后发生了这种情况,这是一个系统级别的权限。 - Juan Acevedo
这是同一个异常吗? - Dinash
这是相同的异常。 - Juan Acevedo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接