私のプロジェクトのgradleでjumboModeを設定しようとしましたが、次のDexIndexOverflowExceptionを解決できるようです:
com.Android.dex.DexException:新しいインデックス65536を非ジャンボ命令にマージできません!
DexIndexOverflowException:新しいインデックス65772を非ジャンボ命令にマージできません!
1)背後で実際にjumboModeオプションが行うことは何ですか?
Android {
...
dexOptions {
jumboMode true
}
}
2)multi-dexを有効にしても同じ問題を解決できることにも気付きましたが、これら2つのアプローチの正しい選択は何ですか?
Android {
...
defaultConfig {
...
multiDexEnabled true
}
}
「ジャンボ」は「以前と同じですが、参照用に多数あります」を意味します。
16ビット値で参照されるDEXファイルのほとんどすべて(16ビットの「単位」として存在するバイトコードも)、したがって、ここでは65536のオブジェクト(メソッドまたは文字列)のみをアドレス指定できます。
ただし、アプリケーションにはさらに多くの文字列を含めることができます。この制限を解決するには? Androidの開発者は、「jumbo」接尾辞付きの新しいオペコードを追加したばかりなので、2 ^ 32アイテムを参照できる「const-string 16_bit_addr」または「const-string 32_bit_addr」で文字列を参照できます。現在、 https://source.Android.com/devices/tech/dalvik/dalvik-bytecode "jumbo"サフィックスは文字列(const-string/jumbo)にのみ存在しますが、古いドキュメントには以下が含まれます:
#
# 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