Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes
阿新 • • 發佈:2017-07-07
efi app appcompat code andro res sdn transpose 四種方法
近期真的比較忙,一不小心博客又荒了兩個月。
從今天起,決定重返csdn,多多紀錄和分享。
先從一個近期被折磨的死去活來的問題。
由於升級了V4包。就一直報這個問題:
com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes;
每次都要clean一下,然後才幹編譯過。光這個過程就浪費了4/5分鐘。出現這個問題是由於最新的v4包(compile ‘com.android.support:support-v4:22.2.1’)已經包括了annotation.jar這個包,但其它jar包裏也包括這個包造成的。而非同一時候包括了v4/V7造成的,所以一堆人說在v7包裏進行例如以下設置:
compile (‘com.android.support:appcompat-v7:22.2.1‘){
exclude group: "com.android.support", module: "support-v4"
}
即設置v7包不包括v4,這個設了也是無用的。
僅僅要確保用v4和v7 的地方版本號一致就可以。
正確的解決方法有例如以下幾種:
1,找到項目其它的依賴包。一定在libs裏的某個jar包裏。隱藏著annotation.jar包,將其刪掉就ok了。此為最正統的解決方法。
2,降級v4包。由於高版本號的v4才包括annotation.jar,能夠在最外面的build.grable裏強制設置:
allprojects {
repositories {
jcenter()
}
configurations.all {
resolutionStrategy.force ‘com.android.support:support-annotations:22.1.0‘
}
}
3,在須要v4包的地方exclude掉annotation包。註意compile要多加個括號:
compile (‘com.android.support:support-v4:22.2.1‘){
exclude module : ‘support-annotations‘
}
缺點是每一個用v4包的地方都要這麽設置下。
4。在application的build.gradle裏的dexOptions設置裏添加一句:preDexLibraries = false就ok了:
PS:以上四種方法都能夠解決這個問題,推薦正統的方法1和偷懶的方法4。
Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes