1. 程式人生 > >Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes

Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes

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