Android MultiDex คืออะไร


111

มีกระทู้เกี่ยวกับ MultiDex มากมาย ฉันมีประสบการณ์บางครั้งแก้ไขข้อผิดพลาดรวมถึงmultiDexEnabled trueในdefaultConfigส่วนของ build.gradle ของฉัน

แต่คุณลักษณะนี้คืออะไร? สถานการณ์ในการใช้งานคืออะไร?

คำตอบ:


166

อ้างถึงเอกสาร :

ไฟล์แอปพลิเคชัน Android (APK) มีไฟล์ bytecode ที่เรียกใช้งานได้ในรูปแบบของไฟล์ Dalvik Executable (DEX) ซึ่งมีโค้ดคอมไพล์ที่ใช้ในการเรียกใช้แอปของคุณ ข้อมูลจำเพาะของ Dalvik Executable จำกัด จำนวนเมธอดทั้งหมดที่สามารถอ้างอิงได้ภายในไฟล์ DEX ไฟล์เดียวเป็น 65,536 รวมถึงวิธีการเฟรมเวิร์ก Android วิธีไลบรารีและวิธีการในโค้ดของคุณเอง การก้าวพ้นขีด จำกัด นี้ทำให้คุณต้องกำหนดค่ากระบวนการสร้างแอปของคุณเพื่อสร้างไฟล์ DEX มากกว่าหนึ่งไฟล์หรือที่เรียกว่าการกำหนดค่าแบบหลายมิติ

ดังนั้นคุณสมบัติคือ: ช่วยให้แอปที่ซับซ้อนของคุณรวบรวมได้ สถานการณ์ในการใช้งานคือเมื่อแอปของคุณไม่สามารถคอมไพล์ได้เนื่องจากกดขีด จำกัด การอ้างอิงเมธอด 64K DEX สิ่งนี้ปรากฏเป็นข้อผิดพลาดในการสร้างเช่น:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

2
มีความคิดว่าโค้ดเบสจะมีขนาดใหญ่เพียงใด (LOC หรือจำนวนหน้าจอคร่าวๆ) คุณจะถึงขีด จำกัด นี้ในแอป 5-6 หน้าจอธรรมดา ๆ หรือว่ามันอยู่ไกลกว่านั้นมาก (เช่น: 10-20 หน้าจอ) ที่คุณน่าจะถึงมัน
มีนาคม

20
@Marchy: โดยปกติแล้วจะมาจากการเพิ่มไลบรารีมากเกินไป เป็นเรื่องยากที่โปรเจ็กต์ที่ไม่มีไลบรารีจะถึงขีด จำกัด นี้
CommonsWare

3
ฉันมีแอปขนาดเล็กที่ใช้ห้องสมุดสนับสนุนของ Google ประมาณ 5 ไลบรารีรวมทั้ง Fabric.io และไลบรารีบุคคลที่สามอื่น ๆ อีก 2 หรือ 3 รายการและฉันต้องใช้ multi-dex
c.dunlap

1
มีข้อเสียของการเปิดใช้งาน multidex หรือไม่? ทำไมไม่ปล่อยให้เป็นจริงตามค่าเริ่มต้นล่ะ
Rafael Lima

1
@RafaelLima: มีปัญหาด้านความปลอดภัยเกี่ยวกับ quasi-backport ของ multidex สำหรับอุปกรณ์รุ่นก่อน Android 5.0 IIRC อาจทำให้เกิดปัญหากับแอปของคุณได้เช่นกันหากคุณพยายามใช้คลาสที่อยู่ในไฟล์ DEX ที่ยังไม่ได้โหลด
CommonsWare

43

ง่ายๆเพียงเท่านี้

ไฟล์. dex ไฟล์เดียวสามารถมี 65,536 เมธอด (การอ้างอิง) ดังนั้นหากจำนวนการอ้างอิงเกิน 65,536 คุณจะใช้ multidex

คำอธิบายเพิ่มเติม!

โปรแกรมแอปพลิเคชัน Android ถูกรวบรวมเป็นไฟล์. dex ซึ่งจะถูกบีบอัดเป็นไฟล์. apk ไฟล์เดียว
DVM (Dalvik Virtual Machine) ใช้ไฟล์. dex / ไฟล์เพื่อเรียกใช้ bytecodes

อะไรทำให้จำนวนการอ้างอิงเกินขีด จำกัด 65,536?
วิธีการเขียนโดยคุณ + วิธีการของ Android Framework + ไลบรารีของบุคคลที่สาม (เช่น Volley, Retrofit, Facebook SDK เป็นต้น)
ฉันได้อ่าน "บางแห่ง"
App Compat 24.2.1 มีวิธีการ 16.5k
Google Play Services GCM 9.6.1 มี 16.7k วิธีการ
ดังนั้นหากคุณสร้างแอปพลิเคชัน Hello world แบบธรรมดาที่มี App Compat 24.2.1 แสดงว่าคุณเป็น1/4แล้ววิธีข้ามขีด จำกัด วิธี dex เดียว


7

MultiDex ใน Android คืออะไร?

Dexย่อมาจาก Dalvik Executable ซึ่งเป็นสิ่งที่ตัวประมวลผลเครื่องเสมือนของ Google (Dalvik) ใช้เพื่อจัดการกับแอปพลิเคชัน Android Android ถูกสร้างขึ้นโดยคำนึงถึงแอปขนาดเล็กและเรียบง่ายและข้อ จำกัด ของ Dalvik Executable หนึ่งตัวได้ตรึงหลังคาของการอ้างอิงโค้ดไว้ที่ 65,536 วิธี เนื่องจากปัญหานี้และวิธีที่เครื่อง Dalvik จัดการกับการเรียกใช้โค้ดจึงมีปัญหาในการคอมไพล์และการเรียกใช้จนกระทั่ง Monkey Patch หรือการรวมMultiDex การรวม MultiDex ใน Android Studioช่วยให้นักพัฒนา Android สามารถคอมไพล์และรันโค้ดเบสด้วยวิธีการมากกว่า 65,536 วิธี!


1

เว็บไซต์ทางการของนักพัฒนา Android ที่ได้รับการยอมรับ

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

1
ขอบคุณสำหรับคำตอบ. นี่เป็นคำถามจากปี 2015 หลายสิ่งหลายอย่างเปลี่ยนไปตั้งแต่นั้นเป็นต้นมา
Roberto Tellez Ibarra

-2

สิ่งที่อนุญาตคือให้ Google (และอื่น ๆ ) ใช้ DRM พูดว่า .. widevine ในส่วนของโค้ดที่ทำให้เกิดปัญหากับผู้ที่ไม่ใช่นักพัฒนาซอฟต์แวร์ส่วนใหญ่ ..

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