2015-05-28 21 views
22

Tôi không hoàn toàn chắc chắn sự khác biệt giữa việc thiết lập tùy chọn dex "jumbomode" thành true vs thêm hỗ trợ multidex.Android: Chế độ Jumbo vs Multidex

Thiết chế độ jumbo là true hoặc multidex true dường như để sửa chữa các vấn đề dưới đây

AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"} 
AGPBI: {"kind":"SIMPLE","text":"com.android.dex.DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!","position":{},"original":"com.android.dex.DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)","position":{},"original":"\tat com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)","position":{},"original":"\tat com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)"} 
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)","position":{},"original":"\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)"} 
... 
+2

có thể trùng lặp của [DexIndexOverflowException: Không thể hợp nhất chỉ số mới 65.772 thành một hướng dẫn phi jumbo !: Jumbo Chế độ? và/hoặc Multi-Dex? Hậu trường là gì?] (Https://stackoverflow.com/questions/30515209/dexindexoverflowexception-cannot-merge-new-index-65772-into-a-non-jumbo-instruc) –

Trả lời

26

Jumbo Chế độ, khi đọc https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html, const-string/jumbo là chế độ jumbo cho chuỗi. Đó là về opcode như vậy mà "op vAA, string @ BBBBBBBB" so với "op vAA, string @ BBBB", 32 bit so với 16 bit.

Multi Dex là cho phép tải các lớp học từ nhiều tệp dex. Lớp primary.dex chính phải chứa các lớp cần thiết để gọi các phương thức lớp này. file dex thứ tìm thấy trong gói ứng dụng ứng dụng sẽ được bổ sung vào classloader sau khi cuộc gọi đầu tiên để MultiDex.install (Context) thấy https://developer.android.com/reference/android/support/multidex/MultiDex.html

5

hãy nhìn vào điều này (tìm kiếm jumbo):

https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part-1

viết tắt: - tương tự như giới hạn số phương pháp Android (64K) - có giới hạn về số chuỗi (64K) - để vượt qua giới hạn này - chế độ jumbo cho phép tham chiếu hơn 2^16 chuỗi bằng cách sử dụng opCode đặc biệt cho phép mã hóa đến 2^32 chuỗi.

trong thực tế: - từ trải nghiệm của tôi cả (MultiDex & JumboMode) có tác động lớn đến thời gian cài đặt apk (chậm hơn nhiều).

hy vọng điều này giúp :)

Các vấn đề liên quan