DexException: ไม่สามารถรวมดัชนีใหม่ 65536 เข้ากับคำสั่งที่ไม่ใช่จัมโบ้


84

ด้วยเหตุผลที่ไม่ทราบสาเหตุจู่ๆแอปของฉันจะไม่สร้างจาก Android Studio

ฉันรับไปเรื่อย ๆ

> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /home/martynas/android-sdk/build-tools/19.1.0/dx --dex --num-threads=4 --output
...
...
...
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Cannot merge new index 65536 into a non-jumbo instruction!

ในขณะที่แอปพลิเคชั่นเดียวกันสร้างสำเร็จจากบรรทัดคำสั่ง ฉันได้ตรวจสอบจำนวนการอ้างอิงวิธีการแล้วและอยู่ต่ำกว่า 64k ที่น่ากลัว

ตอนนี้ฉันใช้ AS 0.8.11

คำตอบ:


57

ลองเพิ่มบรรทัดนี้ใน project.properties ของคุณ

dex.force.jumbo = จริง

ซึ่งจะเพิ่มขีด จำกัด สำหรับสตริงในไฟล์ dex และโครงการของคุณอาจจะรวบรวม

หมายเหตุ:นอกจากนี้ด้วยชุดจัมโบ้ขีด จำกัด อื่นคือ 64K สำหรับวิธีการใน dex เดียวเท่านั้น หากคุณได้รับขีด จำกัด นี้ในอนาคตคุณจะต้องลบการอ้างอิงบางส่วนออก

อัปเดต - บริการ Google Play 6.5 (12-08-14)

ด้วยเวอร์ชัน 6.5 Google ในที่สุดก็เลิกรวมบริการ Google Play ดังนั้นจากนี้ไปคุณจะสามารถเลือกรวบรวม API ลงในไฟล์ปฏิบัติการของคุณได้

ตัวอย่าง:

compile 'com.google.android.gms:play-services-maps:6.5.+'
compile 'com.google.android.gms:play-services-ads:6.5.+'

สำหรับ API บริการ Google Play อื่น ๆ ทั้งหมดโปรดดูที่หน้านี้ใน d.android.com

อัปเดต (21-04-2558): https://developer.android.com/tools/building/multidex.html


11
การเพิ่มไปproject.propertiesยังใช้งานไม่ได้ดังนั้นฉันจึงอัปเดตสคริปต์การสร้าง gradle ตามที่อธิบายไว้ที่นี่: stackoverflow.com/questions/17320088/…
Martynas Jurkus

1
ฉันทำทั้งสองวิธี: เพิ่มคุณสมบัติ dex.force.jumbo และ dexOptions แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน ตัวเลือกอื่น?
Juan Saravia


ขอบคุณ @HareshChhelana ด้วยเหตุผลบางอย่างมันเริ่มได้ผล .. แต่จริงๆแล้วฉันไม่ได้ทำอะไรเป็นพิเศษ ฉันมีเพื่อนร่วมงานบางคนที่กำลังรวบรวมโครงการโดยไม่มีตัวเลือกนี้ แต่ตอนนี้มันใช้งานได้สำหรับฉัน ขอบคุณ!
Juan Saravia

1
แทนที่จะรวบรวมบริการ Google Play ทั้งหมดฉันพบว่าการใช้บันเดิล 'ฐาน' เป็นประโยชน์เพื่อให้อยู่ต่ำกว่าขีด จำกัด dex 65K:compile 'com.google.android.gms:play-services-base:7.3.0'
kip2

245

ตั้งค่าคุณสมบัติ jumboMode ใน build.gradle:

android {
    ...
    dexOptions {
        jumboMode true
    }

}

ฉันยังพบนี้มีประโยชน์: แสดง Dex วิธีการนับด้วยแพคเกจ


12
ขอบคุณ! มันใช้ได้กับฉันด้วย แต่ "jumboMode" นี้หมายความว่าอย่างไร
yital9

3
@ yital9 คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับโหมดจัมโบ้ได้ที่นี่: stackoverflow.com/a/30517283/4034572
Albert Vila Calvo

โปรดอธิบายเหตุผลของบล็อกนี้
eC Droid

ฉันเพิ่มสิ่งนี้ภายในประเภทบิวด์การดีบักเพียงอย่างเดียวเนื่องจากบิวด์รีลีสทำงานได้ดีเนื่องจากโปรการ์ด การสร้างการแก้ไขข้อบกพร่องทำงานได้ดีหลังจากการแก้ไขนี้ นี่สบายดีไหม
โกเมน

1
สิ่งนี้ใช้ได้กับฉัน โปรดทราบว่า build.gradle ที่จะเปลี่ยนควรเป็นโมดูลที่พ่น com.android.dex.DexException
Francis Bacon

54

สิ่งนี้ใช้ได้กับฉัน ฉันได้รับcom.android.dex.DexIndexOverflowException: Cannot merge new index 66636 into a non-jumbo instruction!

android {
    ...
    dexOptions {
        jumboMode true
    }
}

หากไม่ได้ผลคุณอาจถึงขีด จำกัด การอ้างอิงเมธอดใน dex ซึ่งเป็นปัญหาอื่น คุณต้องใช้ multidex หรือ proGuard


มันทำงานสำหรับฉัน ขอบคุณ !!! แต่ 'jumboMode' คืออะไร? คุณช่วยอธิบายฉันได้ไหม? @Sayooj
DG

13

นี่เป็นจุดบกพร่องในการรวมเมื่อไฟล์ dex ที่กำลังถูกรวมมีมากกว่า 65536 สตริง ดัชนีใหม่ไม่สามารถใส่ในคำสั่ง const-string ได้และการควบรวม dex ไม่รองรับการเปลี่ยนคำแนะนำหากมีขนาดต่างกันดังนั้นจึงไม่สามารถขยายเป็นคำสั่ง const-string / jumbo ได้สิ่งนี้ได้รับการแก้ไขแล้วใน jb-mr1 โดยการเพิ่มอ็อพชันใหม่: --force-jumbo บั๊กนี้สามารถแก้ไขได้โดยการเพิ่ม"dex.force.jumbo=true"project.properties


1
@DeepakSharma คุณต้องทำความสะอาดโครงการของคุณหลังจากเปิดใช้งาน jumboMode
Lilo

-1

ด้วย Android Studio ล่าสุดและตั้งค่าสถานะ "บังคับจัมโบ้" ในการตั้งค่าคอมไพเลอร์ Android Studio ปัญหานี้จะหายไป


3
หากเป็นไปได้ให้เพิ่มรายละเอียดในคำตอบของคุณกรุณา
shA.t
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.