20 December 2014

แก้ปัญหา Multiple dex files define บน Android Studio

Updated on


        สำหรับปัญหานี้อาจจะเจอกันได้เป็นบางครั้ง ซึ่งมีสาเหตุมาจากการกำหนด Dependencies เพื่อเพิ่มไลบรารีหลายตัว แล้วเกิดปัญหามีไลบรารีทับซ้อนกัน เพราะแต่ละตัวมีการใช้ไลบรารีตัวอื่นๆด้วย จึงทำให้เกิดการซ้อนกัน แล้วเกิดเออเรอร์ดังกล่าว

// build.gradle (App Module)

...
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.andraskindler.parallaxviewpager:parallaxviewpager:0.3.1'
    compile 'com.viewpagerindicator:library:2.4.1'
    compile 'com.nhaarman.listviewanimation:lib-core:3.1.0@aar'
    compile 'com.nhaarman.listviewanimation:lib-manipulation:3.1.0@aar'
    compile 'com.nhaarman.listviewanimation:lib-core-slg:3.1.0@aar'
}

        จากตัวอย่างนี้คือเจ้าของบล็อกมีการเรียกใช้ไลบรารีอยู่หลายตัว จึงทำให้เกิดปัญหาไลบรารี Android Support v4 ทับซ้อนกัน โดยวิธีแก้ก็คือเลือกใช้แค่ตัวใดตัวหนึ่งเท่านั้น ส่วนตัวที่เหลือก็กำหนดไม่ให้คอมไพล์ Android Support v4 ดังนี้

compile ('<dependencies>') {
    exclude module: 'support-v4'
}

        โดย <dependencies> คือ Package ของไลบรารีที่ไม่ต้องการให้ดึงไลบรารี Android Support v4 ที่ติดมาด้วยมาคอมไพล์

// build.gradle (App Module)

...
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.andraskindler.parallaxviewpager:parallaxviewpager:0.3.1'
    compile ('com.viewpagerindicator:library:2.4.1') {
        exclude module: 'support-v4'
    }
    compile ('com.nhaarman.listviewanimation:lib-core:3.1.0@aar') {
        exclude module: 'support-v4'
    }
    compile ('com.nhaarman.listviewanimation:lib-manipulation:3.1.0@aar') {
        exclude module: 'support-v4'
    }
    compile ('com.nhaarman.listviewanimation:lib-core-slg:3.1.0@aar') {
        exclude module: 'support-v4'
    }
}

        เมื่อลอง Run อีกครั้งก็จะพบว่าไม่เจอปัญหานี้แล้ว

        สำหรับปัญหา Multiple dex files define หรือ Unable merge dex นั้นเป็นปัญหาสุดคลาสสิคที่นักพัฒนามือใหม่ต้องปวดหัวไปกับมัน ซึ่งในบทความนี้เป็นแค่วิธีแก้ไขแบบง่ายๆเท่านั้น สามารถอ่านเรื่องนี้เพิ่มเติมได้จากบทความ [Android Dev Tips] เมื่อเจ้าของบล็อกต้องเจอปัญหา Dependency Conflict