DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!: Jumbo Mode? and/or Multi-Dex? What is behind the scene?

后端 未结 1 1582
南笙
南笙 2021-01-01 16:06

I have tried to set jumboMode in gradle for my project, it seems able to solve the following DexIndexOverflowException:

com.android.dex.DexException:

相关标签:
1条回答
  • 2021-01-01 16:24

    "Jumbo" means "same as before, but with large number for reference".

    Almost anything in DEX-files referenced with 16-bit values (even bytecode present as 16-bit "units"), so here possible to address only 65536 objects (methods or strings), no more.

    But application can contain much more strings! How to solve this limit? Developers of Android just added new opcodes with "jumbo" suffix, so you can reference string with "const-string 16_bit_addr" or "const-string 32_bit_addr" which can reference 2^32 items. Currently https://source.android.com/devices/tech/dalvik/dalvik-bytecode "jumbo" suffix exists only for strings (const-string/jumbo), but in older docs contain:

    #
    # Extended-width opcodes
    #
    
    op 00ff const-class/jumbo           41c  y type-ref      continue|throw
    op 01ff check-cast/jumbo            41c  n type-ref      continue|throw
    op 02ff instance-of/jumbo           52c  y type-ref      continue|throw
    op 03ff new-instance/jumbo          41c  y type-ref      continue|throw
    op 04ff new-array/jumbo             52c  y type-ref      continue|throw
    op 05ff filled-new-array/jumbo      5rc  n type-ref      continue|throw
    op 06ff iget/jumbo                  52c  y field-ref     continue|throw
    op 07ff iget-wide/jumbo             52c  y field-ref     continue|throw
    op 08ff iget-object/jumbo           52c  y field-ref     continue|throw
    op 09ff iget-boolean/jumbo          52c  y field-ref     continue|throw
    op 0aff iget-byte/jumbo             52c  y field-ref     continue|throw
    op 0bff iget-char/jumbo             52c  y field-ref     continue|throw
    op 0cff iget-short/jumbo            52c  y field-ref     continue|throw
    op 0dff iput/jumbo                  52c  n field-ref     continue|throw
    op 0eff iput-wide/jumbo             52c  n field-ref     continue|throw
    op 0fff iput-object/jumbo           52c  n field-ref     continue|throw
    op 10ff iput-boolean/jumbo          52c  n field-ref     continue|throw
    op 11ff iput-byte/jumbo             52c  n field-ref     continue|throw
    op 12ff iput-char/jumbo             52c  n field-ref     continue|throw
    op 13ff iput-short/jumbo            52c  n field-ref     continue|throw
    op 14ff sget/jumbo                  41c  y field-ref     continue|throw
    op 15ff sget-wide/jumbo             41c  y field-ref     continue|throw
    op 16ff sget-object/jumbo           41c  y field-ref     continue|throw
    op 17ff sget-boolean/jumbo          41c  y field-ref     continue|throw
    op 18ff sget-byte/jumbo             41c  y field-ref     continue|throw
    op 19ff sget-char/jumbo             41c  y field-ref     continue|throw
    op 1aff sget-short/jumbo            41c  y field-ref     continue|throw
    op 1bff sput/jumbo                  41c  n field-ref     continue|throw
    op 1cff sput-wide/jumbo             41c  n field-ref     continue|throw
    op 1dff sput-object/jumbo           41c  n field-ref     continue|throw
    op 1eff sput-boolean/jumbo          41c  n field-ref     continue|throw
    op 1fff sput-byte/jumbo             41c  n field-ref     continue|throw
    op 20ff sput-char/jumbo             41c  n field-ref     continue|throw
    op 21ff sput-short/jumbo            41c  n field-ref     continue|throw
    op 22ff invoke-virtual/jumbo        5rc  n method-ref    continue|throw|invoke
    op 23ff invoke-super/jumbo          5rc  n method-ref    continue|throw|invoke
    op 24ff invoke-direct/jumbo         5rc  n method-ref    continue|throw|invoke
    op 25ff invoke-static/jumbo         5rc  n method-ref    continue|throw|invoke
    op 26ff invoke-interface/jumbo      5rc  n method-ref    continue|throw|invoke
    
    0 讨论(0)
提交回复
热议问题