2016-03-12 6 views
6

Androidアプリをインストールすると次のような例外が発生することがありますが、常に再現性があります。私は私のAndroidアプリにmultidexを使用しています android.support.v7.widget.ContentFrameLayoutが にキャストすることはできませんandroid.support.v7.widget.ContentFrameLayoutJava.lang.ClassCastException:Android.support.v7.widget.ContentFrameLayoutはAndroid.support.v7.widget.ContentFrameLayoutにキャストできません

にjava.lang.ClassCastException私はthis questionを読んで、マルチデックスの実装でバグが発生していますが、これはLG G3の5.1と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'

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() 達人{URL 'https://repository-achartengine.forge.cloudbees.com/snapshot' }達人{ をURL 'LIBS-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

あなたのコードを表示してください。インポートとgradleとログを含めます。 –

+0

私はアプリのgradleファイルのほとんどを追加しましたが、これは会社のアプリであり、自分のものではないので、分かりません。 –

答えて

0

いつか戻って、我々は問題の似たようなものに直面し、我々はMultiDexApplicationにbuild.gradleと拡張Applicationクラスに

android { 
     dexOptions { 
      jumboMode = true 
     } 
    } 

を追加、これはあなたを助けかどうかを試してみてください。

+0

ありがとう、私はそれを試してみましょうが、なぜこれが必要であるか知っていますか?私はこれについて読んだが、私はまだ理解していない最高の情報:https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part- 1 –

+0

これはなぜ必要なのか分かりませんが、それまでは別のクラッシュはありませんでした。 –

+0

もう一度見ましたので、これで問題は解決されません。奇妙なことは、システムレベルのアクセス許可であるsetApplicationEnabledSettingを使ってアプリケーションを無効にしてから再び有効にした後に起こったということです。 –

1

この問題は、永続プロセスを持つためにマニフェストに設定されたフラグが原因であることがわかりました。私のアプリはメーカーによってロードされたシステムアプリで、アップデートが発生するとアプリを殺し、アンドロイドは古いプロセスを再起動して奇妙な動作を起こします。私のソリューションは、クラス名とアンドロイドマニフェストコンポーネントを変更して新しいクラス名を使用し、更新後に他の永続プロセスをハングアップさせなければならなくなりました。アプリが一度殺されるか、電話が再起動されると、それらのプロセスは消滅し、再び起動されることはありません。私はまた、永続的なプロセスのためのフラグを削除しました。

関連する問題